1. 方法
1.1 魔术方法
针对属性的
__get()、__set()、__isset()、__unset()
class A
{
public $i = '这是i';
public function __get($name){
return "你这在访问{$name}的属性";
}
}
/* 当属性找不到会调用__get方法
* */
$a = new A();
echo $a -> qweqwe;
针对方法的
__call()、__callStatic()
class A
{
public $i = '这是i';
/* true 不输出,直接给返回值
* */
public function __call($name, $arguments)
{
return "你正在调用:{$name}方法,参数为:".var_export($arguments,true);
}
}
/* 当属性找不到会调用__get方法
* 当方法找不到会调用__call方法(实例化方法)
* 静态方法是__callStatic()
* */
$a = new A();
echo $a ->fn('测试1','test_2');
__toString()
Java和js中是继承,通过重写。php是魔术方法
7.2 回调
call_user_func、call_user_func_array
function fn($i=5,$j=2){
echo "Hello world{$i},{$j}";
}
$v = 'fn';
/* 相当于js中的call
* */
call_user_func($v, 3000);
/* 动态调用,传入args,相当于js中的apply
* */
$arg = array('test_1', 'test_2');
call_user_func_array($v,$arg);
2. 数组式访问
class A implements ArrayAccess{
public function offsetExists($offset)
{
}
public function offsetGet($offset)
{
return $this->$offset;
}
public function offsetSet($offset, $value)
{
}
public function offsetUnset($offset)
{
}
}
$a = new A();
$name = 'i';
$a->$name =5;
echo $a['i'];