一、属性与方法重载
(1)属性重载
- 查询拦截器
class User
{
// 属性
private $data = [
'age'=>20
];
// 查询拦截器
public function __get($name)
{
// $name :属性名
if(array_key_exists($name,$this->data)){
return $this->data[$name];
}
return "属性 {$name} 不存在";
}
}
$user = new User;
echo $user->name.'<hr>';
echo $user->age.'<hr>';
- 更新拦截器
// 更新拦截器
public function __set($name,$value)
{
// 1. 有没有这个属性?
if(array_key_exists($name,$this->data)){
// 2. 这个值是否合法?
if($name === 'age'){
if($value>=18 && $value<=59){
$this->data[$name] = $value;
}else{
echo '年龄必须在18-59之间';
}
}else{
// 以上操作仅对age有效,其他属性之间赋值
$this->data[$name] = $value;
}
}else{
echo '禁止动态创建属性';
}
}
/**
* 为一个属性赋值的时候,必须要搞清楚2件事
* 1. 有没有这个属性?
* 2. 这个值是否合法?
*/
$user->age = 29;
echo $user->age . '<hr>';
$user->age2 = 18;
echo $user->age2.'<hr>';
echo '<hr color=red>';
(2)方法重载
- 常规方法拦截器
// 方法拦截器
public function __call($name,$args)
{
// $name:方法名,$args:传给方法的参数
printf('方法:%s<br>参数:<pre>%s</pre>',$name,print_r($args,true));
}
// 常规方法/非静态方法/用实例调用
$user->hello('张三','hello World');
echo '<hr>';
- 静态方法拦截器
// 静态方法拦截器
public static function __callStatic($name,$args)
{
// $name:方法名,$args:传给方法的参数
printf('方法:%s<br>参数:<pre>%s</pre>',$name,print_r($args,true));
}
User::world(100,200);
二、命名空间与类自动加载器
(1)命名空间