属性方法重载
<?php
// 属性重载:__get(),__set()
// 方法重载:__call(),__callStatic()
class Person1
{
private $data = [
'name'=>'xyz',
'age'=>20
];
// 查询拦截器
public function __get($name)
{
if (array_key_exists($name,$this->data)){
return $this->data[$name];
}
return "属性{$name}不存在";
}
// 跟新拦截器
public function __set($name,$value){
// 查询有无属性
if(array_key_exists($name,$this->data)){
// 如果有属性,则支持属性修改
// 对姓名进行改写
if ($name==='name'){
$this->data[$name]=$value;
}
elseif($name === 'age'){
$this->data[$name]=$value;
}
}
else{
echo "禁止动态创建属性";
}
}
// 方法拦截器
public function __call($name,$args){
// $name: 方法名, $args: 传给方法的参数
printf('方法: %s<br>参数:<pre>%s</pre>', $name, print_r($args, true));
}
// 静态方法拦截器
public static function __callStatic($name, $arguments)
{
printf('方法: %s<br>参数:<pre>%s</pre>', $name, print_r($arguments, true));
}
}
$person = new Person1;
echo $person->name.'<br>';
echo '<hr color=red>';
// 常规方法/非静态方法/用实例调用
$person->hello('dfas', '20');
// 静态方法
Person1::world(100, 200);
效果:
命名空间
创建四个demo.php在/php/cn目录中
<?php
namespace php\cn;
class demo1
{
}
echo demo1::class.'<br>';
注册机写法
<?php
spl_autoload_register(function($class){
$path= str_replace('\\',DIRECTORY_SEPARATOR,$class);
$file = __DIR__.DIRECTORY_SEPARATOR.$path.'.php';
require $file;
});
最后调用
<?php
namespace ns1;
require __DIR__.'/autoloader.php';
class demo2{
}
echo demo2::class.'<br>';
echo \php\cn\demo2::class;
写法