commit a331e3f1d54329027e18231838a65341d0ec3c1a Author: wanyongkang <937888580@qq.com> Date: Sat Oct 3 17:23:32 2020 +0800 初始提交 diff --git a/app/test/controller/Index.php b/app/test/controller/Index.php new file mode 100644 index 0000000..077172c --- /dev/null +++ b/app/test/controller/Index.php @@ -0,0 +1,74 @@ +fetchAll(); + $userlist = $user->field('`LoginCode`')->fetchAll(); + + $user_manager = []; + $user_product = []; + $user_vip_price = []; + $user_contact = []; + $user_next = []; + $sell_order = []; + $sell_order_next = []; + foreach ($list as $info) { + switch ($info['operation']) { + case '点击客户管理': + $user_manager[] = $info; + break; + case '点击客户信息产品账号': + $user_product[] = $info; + break; + case '点击客户信息会员价': + $user_vip_price[] = $info; + break; + case '点击客户更多联系方式': + $user_contact[] = $info; + break; + case '点击客户信息下一页': + $user_next[] = $info; + break; + case '点击销售订单': + $sell_order[] = $info; + break; + case '点击销售订单下一页': + $sell_order_next[] = $info; + break; + + } + } + $i = 0; + $j = 0; + $user_f_list = []; + + $user_l = ''; + foreach ($userlist as $info) { + //处理客户管理 + if ($i % 50 != 0 || $i==0) { + $user_l .= $info['LoginCode'].','; + } else { + + $user_l = ''; + $j++; + } + $user_f_list[$j] = $user_l; + + $i++; + } + foreach($user_manager as $k=>$v){ + + } + + } + +} diff --git a/app/test/model/Test.php b/app/test/model/Test.php new file mode 100644 index 0000000..1e182a8 --- /dev/null +++ b/app/test/model/Test.php @@ -0,0 +1,11 @@ + 'test\controller\Index', + 'defaultAction' => 'index', + + //根命名空间 + 'namespace' => [ + 'app' => APP_PATH.DIRECTORY_SEPARATOR.'app', + 'fastphp' => APP_PATH.DIRECTORY_SEPARATOR.'fastphp', + ], + + // 数据库连接 + 'db' => [ + 'host' => '127.0.0.1', + 'port' => 3306, + 'dbname' => 'test', + 'username' => 'root', + 'password' => '123456789' + ], +]; \ No newline at end of file diff --git a/fastphp/Fastphp.php b/fastphp/Fastphp.php new file mode 100644 index 0000000..e11a927 --- /dev/null +++ b/fastphp/Fastphp.php @@ -0,0 +1,133 @@ +config = $config; + require CORE_PATH.'/func/common.php'; + } + + //运行程序 + public function run(){ + spl_autoload_register(array($this,'loadClass')); + $this->setReporting(); + $this->unregisterGlobals(); + $this->setDbConfig(); + $this->route(); + } + + //路由处理 + public function route(){ + $controllerName = $this->config['defaultController']; + $actionName = $this->config['defaultAction']; + $param = array(); + + $url = $_SERVER['REQUEST_URI']; + //清除?之后的内容 + $position = strpos($url,'?'); + $url = $position === false?$url:substr($url,0,$position); + //删除前后的/ + $url = trim($url,'/'); + + if($url){ + //使用 / 分割 + $urlArray = explode('/',$url); + //删除空的数组元素 + $urlArray = array_filter($urlArray); + //获取控制器名 + $controllerName = array_shift($urlArray).'\\controller\\'.ucfirst(array_shift($urlArray)); + + //获取动作名 + $actionName = $urlArray?array_shift($urlArray):$actionName; + + //获取url参数 + $param = $urlArray?$urlArray:array(); + } + + //判断控制器和操作是否存在 + $controller = 'app\\'.$controllerName; + if(!class_exists($controller)){ + exit($controller.'控制器不存在!'); + } + if(!method_exists($controller,$actionName)){ + exit($actionName.'方法不存在!'); + } + + //实例化控制器,这个后续结合controller基类一起看 + $dispatch = new $controller($controllerName,$actionName); + + //以下等同于$dispatch->$actionName($param); + call_user_func_array(array($dispatch,$actionName),$param); + } + + //检测开发环境 + public function setReporting(){ + if(APP_DEBUG === true){ + error_reporting(E_ALL); + ini_set('display_errors','On'); + } else { + error_reporting(E_ALL); + ini_set('display_errors','Off'); + ini_set('log_errors','On'); + } + } + + //删除敏感字符 + public function stripSlashesDeep($value){ + $value = is_array($value)?array_map(array($this,'stripSlashesDeep'),$value):stripSlashes($value); + return $value; + } + + //检测自定义全局变量并移除 + public function unregisterGlobals(){ + if(ini_get('register_globals')){ + $array = array('_SESSION','_POST','_GET','_COOKIE','_REQUEST','_SERVER','_ENV','_FILES'); + foreach ($array as $value){ + foreach ($GLOBALS[$value] as $key=>$var){ + if($var===$GLOBALS[$key]){ + unset($GLOBALS[$key]); + } + } + } + } + } + + //配置数据库信息 + public function setDbConfig(){ + if(isset($this->config['db'])){ + define('DB_HOST',$this->config['db']['host']); + define('DB_PORT',$this->config['db']['port']); + define('DB_NAME',$this->config['db']['dbname']); + define('DB_USER',$this->config['db']['username']); + define('DB_PASS',$this->config['db']['password']); + } + } + + //自动加载类 + public function loadClass($className){ + $vendor = substr($className,0,strpos($className,'\\')); + $vendorDIR = $this->config['namespace'][$vendor]; + $filePath = substr($className,strlen($vendor)).'.php'; + //包含应用文件 + $file = strtr($vendorDIR.$filePath,'\\',DIRECTORY_SEPARATOR); + if(!is_file($file)){ + return; + } + + include $file; + } + +} diff --git a/fastphp/base/Controller.php b/fastphp/base/Controller.php new file mode 100644 index 0000000..671b597 --- /dev/null +++ b/fastphp/base/Controller.php @@ -0,0 +1,33 @@ +_controller = $controller; + $this->_action = $action; +// $this->_view = new View($controller,$action); + } + +// //分配变量 +// public function assign($name,$value){ +// $this->_view->assign($name,$value); +// } +// +// //渲染视图 +// public function render(){ +// $this->_view->render(); +// } +} \ No newline at end of file diff --git a/fastphp/base/Model.php b/fastphp/base/Model.php new file mode 100644 index 0000000..597f20d --- /dev/null +++ b/fastphp/base/Model.php @@ -0,0 +1,26 @@ +table){ + //获取模型类名称 + $this->model = get_class($this); + + //删除模型名最后的model + $this->model = substr($this->model,0,-5); + + //数据库表名与类名一致 + $this->table = strtolower($this->model); + } + } +} \ No newline at end of file diff --git a/fastphp/db/Db.php b/fastphp/db/Db.php new file mode 100644 index 0000000..7784382 --- /dev/null +++ b/fastphp/db/Db.php @@ -0,0 +1,39 @@ +PDO::FETCH_ASSOC); + self::$pdo = new PDO($dns,DB_USER,DB_PASS,$option); + self::$pdo->query("set names utf8"); + + return self::$pdo; + + } catch (PDOException $e){ + exit($e->getMessage()); + } + } +} \ No newline at end of file diff --git a/fastphp/db/Sql.php b/fastphp/db/Sql.php new file mode 100644 index 0000000..8173147 --- /dev/null +++ b/fastphp/db/Sql.php @@ -0,0 +1,247 @@ +1] 或者 '`id`=1' + */ + public function where($where){ + $this->param = []; + $this->filter = ''; + if($where){ + $this->filter .= 'WHERE '; + if(is_string($where)){ + $this->filter .= $where; + } else { + $flag = true; + foreach ($where as $key => $value){ + if($flag){ + $flag = false; + if(is_array($value)){ + $this->filter .= '`'.$key.'` '.$value[0].' :'.$key; + $this->param[$key] = $value[1]; + } else { + $this->filter .= '`'.$key.'` = :'.$key; + $this->param[$key] = $value; + } + } else { + if(is_array($value)){ + $this->filter .= ' AND `'.$key.'` '.$value[0].' :'.$key; + $this->param[$key] = $value[1]; + } else { + $this->filter .= ' AND `'.$key.'` = :'.$key; + $this->param[$key] = $value; + } + } + } + } + } + return $this; + } + + /** + * 拼装排序条件 + * @param array $order 排序条件 + * @return $this + */ + public function order($order = []){ + if($order){ + $this->filter .= 'ORDER BY '; + $this->filter .= implode(' ,',$order); + } + return $this; + } + + /** + * group by + * @param array $order + * @return $this + */ + public function group($order = []){ + if($order){ + $this->filter .= 'GROUP BY '; + $this->filter .= implode(' ,',$order); + } + return $this; + } + + /** + * 查询字段 + * @param string $field + * @return $this + */ + public function field($field = '*'){ + $this->field = $field; + return $this; + } + + /** + * 查询所有 + * @return mixed + */ + public function fetchAll(){ + $sql = sprintf('SELECT %s FROM `%s` %s',$this->field,$this->table,$this->filter); + $this->filter = ''; + $sth = Db::pdo()->prepare($sql); + $sth = $this->formatParam($sth,$this->param); + $sth->execute(); + + return $sth->fetchAll(); + } + + /** + * 查询一条 + * @return mixed + */ + public function fetch(){ + $sql = sprintf('SELECT %s FROM `%s` %s',$this->field,$this->table,$this->filter); + $this->filter = ''; + $sth = Db::pdo()->prepare($sql); + $sth = $this->formatParam($sth,$this->param); + $sth->execute(); + + return $sth->fetch(); + } + + /** + * 根据条件(id)删除 + * @param $id + * @return mixed + */ + public function delete(){ + $sql = sprintf('DELETE FROM `%s` %s',$this->table,$this->filter); + $this->filter = ''; + $sth = Db::pdo()->prepare($sql); + $sth = $this->formatParam($sth,$this->param); + $sth->execute(); + + return $sth->rowCount(); + } + + /** + * 新增数据 + * @param $data + * @return mixed + */ + public function add($data){ + $sql = sprintf('INSERT INTO `%s` %s',$this->table,$this->formatInsert($data)); + $sth = Db::pdo()->prepare($sql); + $sth = $this->formatParam($sth,$data); + $sth->execute(); + + return $sth->rowCount(); + } + + /** + * 新增多条数据 + * @param $data + * @return int + */ + public function addAll($data){ + $sql = sprintf('INSERT INTO `%s` %s',$this->table,$this->formatInsertAll($data)); + $sth = Db::pdo()->prepare($sql); + $sth->execute(); + + return $sth->rowCount(); + } + + /** + * 修改数据 + * @param $data + * @return mixed + */ + public function update($data){ + $sql = sprintf('UPDATE `%s` SET %s %s',$this->table,$this->formatUpdate($data),$this->filter); + $this->filter = ''; + $sth = Db::pdo()->prepare($sql); + $sth = $this->formatParam($sth,$data); + $sth = $this->formatParam($sth,$this->param); + $sth->execute(); + + return $sth->rowCount(); + } + + /** + * 绑定具体变量值 + * @param PDOStatement $sth + * @param array $params + * @return PDOStatement + */ + public function formatParam(PDOStatement $sth,$params = []){ + foreach ($params as $param=>&$value){ + $param = is_int($param)?$param+1:':'.ltrim($param,':'); + $sth->bindParam($param,$value); + } + return $sth; + } + + /** + * 将数组转化为插入格式的sql语句 + * @param $data + * @return string + */ + private function formatInsert($data){ + $fields = []; + $names = []; + foreach ($data as $key=>$value) { + $fields[] = sprintf('`%s`',$key); + $names[] = sprintf(':%s',$key); + } + $field = implode(',',$fields); + $name = implode(',',$names); + return sprintf('(%s) VALUES(%s)',$field,$name); + } + + /** + * 格式化插入数据 + * @param $data + * @return string + */ + private function formatInsertAll($data){ + $fields = []; + $values =''; + foreach ($data[0] as $key=>$value) { + $fields[] = sprintf('`%s`',$key); + } + foreach ($data as $k=>$v){ + $values .= '(\''.implode('\',\'',$v).'\'),'; + } + $field = implode(',',$fields); + $values = rtrim($values,','); + return sprintf('(%s) VALUES %s',$field,$values); + } + + /** + * 更新数据的格式转换 + * @param $data + * @return string + */ + private function formatUpdate($data){ + $fields = []; + foreach ($data as $key=>$value){ + $fields[] = sprintf('`%s`=:%s',$key,$key); + $this->param[$key] = $value; + } + return implode(',',$fields); + } +} \ No newline at end of file diff --git a/fastphp/func/common.php b/fastphp/func/common.php new file mode 100644 index 0000000..82b2712 --- /dev/null +++ b/fastphp/func/common.php @@ -0,0 +1,46 @@ +' . $label . htmlspecialchars($output, ENT_QUOTES) . ''; + } else { + $output = $label . print_r($var, true); + } + } else { + ob_start(); + var_dump($var); + $output = ob_get_clean(); + if (!extension_loaded('xdebug')) { + $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output); + $output = '
' . $label . htmlspecialchars($output, ENT_QUOTES) . ''; + } + } + return $output; +} \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..4e0b251 --- /dev/null +++ b/index.php @@ -0,0 +1,34 @@ +run(); + + +//require './Autoload.php'; +// +// +//spl_autoload_register('Autoload::loadTest'); +// +//$inn = new \app\Demo(); +//$inn->abs(-123); +//echo '