클래스 간 호출 후 메서드를 찾을 수 없습니다.
方人胥
方人胥 2021-06-12 17:16:18
0
2
895

데이터베이스에 대한 체인 액세스를 구현하기 위한 정적 메서드 오버로드 연습

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);
}

입니다.
方人胥
方人胥

모든 응답(2)
方人胥

문제를 발견했는데 Query.php의 65번째 줄에 Splicing 시 FROM 전후에 공백을 추가해야 합니다.

方人胥

페이지 프롬프트 메소드 'table'을 데이터베이스에서 찾을 수 없습니다

image.png

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿