데이터베이스에 대한 체인 액세스를 구현하기 위한 정적 메서드 오버로드 연습
demo5.php는 Query.php의 클래스를 참조합니다
그런 다음 Query에서 메서드에 액세스하면 'table' 메서드를 데이터베이스에서 찾을 수 없다는 메시지가 페이지에 표시됩니다
다음은 소스 코드입니다. 오류 확인에 도움이 되었으면 좋겠습니다
첫 번째는 Query.php
<?php //常用的数据查询操作 class Query { //连接对象 public $pdo = null; //数据表名称 public $table = ''; //字段列表 public $field = ''; //查询条件 public $where = ''; //显示数量 public $limit = 0; //构造方法 public function __construct(PDO $pdo) { $this->pdo = $pdo; } //调用表名 public function table($tableName) { $this->table = $tableName; //关键是这一步 return $this; } //调用字段 public function field($fields) { $this->field = $fields; //关键是这一步 return $this; } //设置查询条件 public function where($where) { $this->where = $where; return $this; } //设置显示数量 public function limit($limit) { $this->limit = $limit; return $this; } //创建SQL语句查询 public function select() { //设置查询条件 $fields = empty($this->field) ? '*' : $this->field; $where = empty($this->where) ? '' : ' WHERE ' . $this->where; $limit = empty($this->limit) ? '' : ' LIMIT ' . $this->limit; //SQL $sql = 'SELECT '.$fields. 'FROM' .$this->table. $where . $limit; //预处理执行 $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } }
두 번째는 데모5.php
<?php //方法重载实例演示 require 'Query.php'; class Database { //数据库连接对象 protected static $pdo = null; //数据库连接方法,每次查询时再连接,实现真正的惰性连接,节省系统开销 public static function connection() { self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin'); } //静态方法的重载,实现跨类调用 public static function __callStatic($name,$arguments) { //连接上数据库 self::connection(); //实例化查询类 $query = new Query(self::$pdo); //访问Query中的方法 return call_user_func_array([$query, $name],[$arguments[0]]); } } $cats = Database::table('category') ->field('cate_id, name, alias') ->where('cate_id>=2') ->select(); foreach($cats as $cat){ print_r($cat); }입니다.
문제를 발견했는데 Query.php의 65번째 줄에 Splicing 시 FROM 전후에 공백을 추가해야 합니다.
페이지 프롬프트 메소드 'table'을 데이터베이스에서 찾을 수 없습니다