批改状态:合格
老师批语:才学到这里, 有点慢, 作业先完成当下正在学的
作业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>';
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号