PHP -- 方法和数组式访问

xiaoxiao2021-02-28  130

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'];
转载请注明原文地址: https://www.6miu.com/read-57793.html

最新回复(0)