批改状态:合格
老师批语:property_exists()这个方法用得好
1. 实例演示四个属性重载的魔术方法的使用方式
<?php
namespace _1008;
// 属性重载
// __get(), __set(), __isset(), __unset()
class monkey{
private $name;
private $food;
protected $achieve ='96';
public function __construct($name,$food)
{
$this->name = $name;
$this->food = $food;
}
// __get()
public function __get($name)
{
if(property_exists($this,$name)){
return $this -> $name;
}else{
return '没有找到相应数据!';
}
}
//__set()
public function __set($name, $value)
{
if(property_exists($this,$name)){
return $this->$name =$value;
}else{
return '没有找到相应数据!';
}
}
//isset()
public function __isset($name)
{
return isset($this->$name);
}
//unset()
public function __unset($name)
{
unset($this->name);
}
}
$obj = new monkey('孙悟空','香蕉');
echo '__get()'.'<br>';
echo '小猴的名字是:'.$obj->name.',他喜欢的食物是:'.$obj->food;
echo '<hr>';
echo '__set()'.'<br>';
$obj ->name ='六耳猕猴';
$obj ->food='蟠桃';
echo '小猴的名字是:'.$obj->name.',他喜欢的食物是:'.$obj->food;
echo '<hr>';
echo '__isset()'.'<br>';
var_dump(isset($obj->name));
echo '<br>';
var_dump(isset($obj->foods));
?>点击 "运行实例" 按钮查看在线实例
2. 实例演示call_user_func_array()回调执行函数/对象/类的方法的流程与方式
<?php
namespace _1008;
function pro($a,$b){
echo "{$a}*{$b}=".$a*$b;
}
echo pro(2,5).'<br>';
echo call_user_func(__NAMESPACE__.'\pro',4,9);
echo '<hr>';
echo call_user_func_array(__NAMESPACE__.'\pro',[9,8]);
echo '<hr>';
class demo2{
public function pro($a,$b){
return "{$a}*{$b}=".$a * $b;
}
}
$obj = new demo2();
echo call_user_func_array([$obj,'pro'],[5,8]);
echo '<hr>';
class demo02{
public static function pro($a,$b){
return "{$a}*{$b}=".$a * $b;
}
}
echo call_user_func_array([new demo02(),'pro'],[9,9]);
?>点击 "运行实例" 按钮查看在线实例
3. 实例演示方法重载的实现原理与参数获取方式
<?php
namespace _1008;
class demo3{
public function __call($name, $arguments)
{
return $name. '<br>数据列表: <pre>'.print_r($arguments,true);
}
public static function __callStatic($name, $arguments)
{
return $name. '<br>数据列表: <pre>'.print_r($arguments,true);
}
}
$obj = new demo3();
echo $obj->one(1,2,3,4,5,6);
echo '<hr>';
echo demo3::two('一','二','三','四','五');
?>点击 "运行实例" 按钮查看在线实例
4. 实例演示数据库链接调用的实现原理与过程(静态方法重载__callStatic实现)
<?php
namespace _1008;
class Query
{
public $pdo = null;
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->field = empty($fields) ? '*' : $fields;
return $this;
}
public function where($where = '')
{
$this->where = empty($where) ? $where : ' WHERE '. $where;
return $this;
}
public function limit($limit)
{
$this->limit = empty($limit) ? $limit : ' LIMIT '. $limit;
return $this;
}
public function select()
{
$sql = 'SELECT '
. $this->field
. ' FROM '
. $this->table
. $this->where
. $this->limit;
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
class db{
protected static $pdo =null;
public static function connection(){
self::$pdo =new \PDO('mysql:host=www.phpxuexi.com;dbname=php', 'root', 'root');
}
public static function __callStatic($name, $arguments)
{
self::connection();
$query = new query(self::$pdo);
return call_user_func_array([$query,$name],$arguments);
}
}
$mobile = db::table('mobile')
->field('id,name')
->where('price > 3000')
->select();
foreach ($mobile as $mobile){
print_r($mobile);
echo '<br>';
}
?>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号