Blogger Information
Blog 23
fans 0
comment 0
visits 13627
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2019100802
王长中的博客
Original
627 people have browsed it

实例

<?php
//call_user_func_array()回调函数;
function sum($a, $b)
{
    return $a + $b;
}

echo call_user_func_array('sum', [12, 25]);
echo '<br>';
//call_user_func_array()回调类中的函数
class fun
{
    public function sum($a, $b)
    {
        return $a + $b;
    }
}
echo call_user_func_array(array(new fun,'sum'),[12,22]);
echo '<br>';
//对象中的方法以回调的方式调用
class fun2{

    public  function sum($a,$b){
        return $a+$b;
    }
}
$obj=new fun2;
echo call_user_func_array([$obj,'sum'],[52,22]);
echo '<br>';
//对象中的静态方法以回调的方式调用
class fun1{

    public static function sum($a,$b){
        return $a+$b;
    }
}
$obj=new fun1;
echo call_user_func_array('fun1::sum',[52,22]);
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

小结:call_user_func_array()函数有两个参数,第一个参数是引用的回调函数,第二个参数是一个数组,作为参数传入回调函数。

二,实例演示方法重载的实现原理与参数获取方式

访问一个不存在或无权访问的方法时会自动调用__call方法,如:


实例

<?php
class a
{
    public function __call($func,$arr){
        return $func.'不存在';
    }
}

$obj = new a;
echo $obj->getsex();
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

访问一个不存在或无权访问的静态方法时会自动调用__callstatic()方法


实例

<?php
class b
{
    public static function __callStatic($func,$arr){
        return $func.'不存在';
    }
}
echo b::getsex1();
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

小结:

__call()和__callstatic都有两个参数,第一个是自动接收的不存在的方法名,第二个是用数组的方式接收不存在的方法的参数,

实例演示数据库链接调用的实现原理与过程

实例

<?php
class Query
{
    public $pdo;
    public $table;
    public $field = '*';
    public $where;
    public $limit;
//用构造方法,实例化时自动连接数据库
    public function __construct($pdo)
    {
        $this->pdo = $pdo;
    }

    public function table($tablename)
    {
        $this->table = $tablename;
        //返回当前类实例, 用来链式调用后面的其它方法
        return $this;
    }

    public function field($fields = '*')
    {
        $this->this = empty($fields) ? '*' : $fields;
        return $this;
    }

    public function where($where)
    {
        //注意加上sql关键字'where'
        $this->where = empty($where) ? '' : ' WHERE ' . $where;
        return $this;
    }

    public function limit($limit)
    {
        $this->limit = empty($limit) ? '' : $limit;
        return $this;
    }

    public function select()
    {
        $sql = 'select '
            . $this->field
            . ' from '
            . $this->table
            . $this->where
            . $this->limit;
        //预处理sql语句
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        //打印一条 SQL 预处理命令
        //die($stmt->debugDumpParams());
        //返回相关结果
        return $stmt->fetchall(\PDO::FETCH_ASSOC);
    }
}

class DB
{
    protected static $pdo;
//连接pdo方法
    public static function connection()
    {
        self::$pdo = new \PDO('mysql:host=127.0.0.1;dbname=php', 'root', '210584');
    }

    public static function __callStatic($name, $args)
    {
        self::connection();
        $query = new Query(self::$pdo);
        return call_user_func_array([$query, $name], $args);
    }
}

$staffs = DB::table('staff')
    ->where("name='李达康'")
    //->field()
    ->select();

foreach ($staffs as $staff) {
    print_r($staff);
    echo '<br>';
}
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

本节课学习了属性重载和方法重载,在访问一个不存在或无权访问的属性或方法时,通过魔术方法可以自动调用;


Correction status:qualified

Teacher's comments:下次把作业名称写完整, 看名称 都不知你写的是什么?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post