Correction status:qualified
Teacher's comments:才学到这里, 有点慢, 作业先完成当下正在学的
作业1: 实例演示四个属性重载的魔术方法的使用方式
<?php namespace _php; class Demo { protected $name; private $salary; public $counry; public function __construct($name,$salary) { $this->name=$name; $this->salary=$salary; } public function __get($name) { // if($name==='admin'){ // return $this->$name ; // }else{ // return '无权查看'; // } return ($this->name==='admin') ? $this->$name :'无权查看'; } public function __set($name,$value) { return $this->$name =$value ; } public function __isset($name) { return isset($this->$name); } public function __unset($name) { unset($this->$name); } } $query = new Demo('admin',9000); echo $query->salary; echo "<hr>"; echo $query->salary='6000';
2、 实例演示call_user_func_array()回调执行函数/对象/类的方法的流程与方式
<?php namespace _php; //call_user_func_array() 调用函数 function sum($a,$b) { return "{$a} + {$b} = " . ($a + $b); } echo call_user_func_array(__NAMESPACE__.'\sum',[50,60]); echo '<hr>'; //call_user_func_array() 调用类函数/对象 class Test { public function sum($a,$b) { return "{$a} + {$b} = " . ($a + $b); } public function sum2($a,$b) { return "{$a} - {$b} = " . ($a - $b); } public static function sum3($a,$b) { return "{$a} * {$b} = " . ($a * $b); } public static function sum4($a,$b) { return "{$a} / {$b} = " . ($a / $b); } } //常规调用对象及类 $obj = new Test(); echo call_user_func_array([$obj,'sum'],[55,60]); echo '<hr>'; echo call_user_func_array([new Test(), 'sum'], [33, 33]); echo '<hr>'; //调用静态类及对象 echo call_user_func_array([Test::class,'sum3'],[50,2]); echo '<hr>'; echo call_user_func_array([$obj, 'sum3'], [2, 2]);
点击 "运行实例" 按钮查看在线实例
3、实例演示方法重载的实现原理与参数获取方式
<?php //当访问类中没有命名的方法就自动调用默认方法,叫方法重载 //方法重载:__call(); 静态方法__callstatic(); namespace _php; class Test { public function __call($name, $arguments) { return '方法名:'.$name.'<br>参数:'.print_r($arguments,true); } public static function __callStatic($name, $arguments) { return '方法名:'.$name.'<br>参数:'.print_r($arguments,true); } public static function set($name, $arguments) { return '方法名:'.$name.'<br>参数:'.print_r($arguments,true); } public static function ser($name, $arguments) { return '方法名:'.$name.'<br>参数:'.print_r($arguments,true); } } $obj = new Test(); //echo $obj->test('11','22','33','44'); echo Test::set1('test','11','22','33','44');
点击 "运行实例" 按钮查看在线实例
4、实例演示数据库链接调用的实现原理与过程(静态方法重载__callStatic实现)
<?php namespace _1008; require 'Query.php'; class DB { // 连接对象 protected static $pdo = null; // 数据库的连接方法 public static function connection() { self::$pdo = new \PDO('mysql:host=127.0.0.1;dbname=chenqingxuan', 'root', 'cqx07231950'); } public static function __callStatic($name, $arguments) { // 连接数据库 self::connection(); // 实例化查询类,将连接对象做为参数 $query = new Query(self::$pdo); // 调用查询对象$query中的对应的方法 return call_user_func_array([$query, $name],$arguments); } } $staffs = DB::table('staff') ->field('staff_id,name,position,mobile') ->where('staff_id > 2') ->limit(5) ->select(); // 遍历 foreach ($staffs as $staff) { print_r($staff); echo '<br>'; }
点击 "运行实例" 按钮查看在线实例