亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

After cross-class call, method cannot be found
方人胥
方人胥 2021-06-12 17:16:18
0
2
1211

Exercise of doing static method overloading to implement chained access to the database

demo5.php references the class of Query.php

Then access the method in Query, the page prompts me method' table' was not found in Database

The following is the source code, I hope it can help me check the error

The first one is Query.php

<?php
//常用的數(shù)據(jù)查詢操作
class Query
{
    //連接對象
    public $pdo = null;

    //數(shù)據(jù)表名稱
    public $table = '';

    //字段列表
    public $field = '';

    //查詢條件
    public $where = '';

    //顯示數(shù)量
    public $limit = 0;


    //構(gòu)造方法
    public function __construct(PDO $pdo)
    {
        $this->pdo = $pdo;
    }

    //調(diào)用表名
    public function table($tableName)
    {
        $this->table = $tableName;
        //關(guān)鍵是這一步
        return $this;
    }

    //調(diào)用字段
    public function field($fields)
    {
        $this->field = $fields;
        //關(guān)鍵是這一步
        return $this;
    }

    //設(shè)置查詢條件
    public function where($where)
    {
        $this->where = $where;
        return $this;
    }
    //設(shè)置顯示數(shù)量
    public function limit($limit)
    {
        $this->limit = $limit;
        return $this;
    }

    //創(chuàng)建SQL語句查詢
    public function select()
    {
        //設(shè)置查詢條件
        $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;

        //預(yù)處理執(zhí)行
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

The second one is demo5 .php

<?php
//方法重載實例演示
require 'Query.php';
class Database
{
    //數(shù)據(jù)庫連接對象
    protected static $pdo = null;

    //數(shù)據(jù)庫連接方法,每次查詢時再連接,實現(xiàn)真正的惰性連接,節(jié)省系統(tǒng)開銷
    public static function connection()
    {
        self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');
    }

    //靜態(tài)方法的重載,實現(xiàn)跨類調(diào)用
    public static function __callStatic($name,$arguments)
    {
        //連接上數(shù)據(jù)庫
        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);
}

方人胥
方人胥

reply all(2)
方人胥

Found the problem, it is line 65 of Query.php. When splicing, spaces should be added before and after FROM.

方人胥

Page prompt method 'table' was not found in Database

image.png

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template