我正在寻找一种方法来拦截 array_push
中的操作,因为当它被检索时,数组的每个值都有另一个信息,例如:
class ClassName {
var $test = array();
function __set($attr, $value) {
$this->$attr = 'My extra value'.$value;
}
function index(){
array_push($this->test, "some val");
array_push($this->test, "some other val");
print_r($this->test);
}
}
$o = new ClassName();
$o->index();
并期望得到类似的东西:
Array
(
[0] => My extra value some val
[1] => My extra value some other val
)
但是我得到:
Array
(
[0] => some val
[1] => some other val
)
感谢大家
最佳答案
您可以使用实现 ArrayAccess 接口(interface)的类,而不是使用数组。这样您就可以完全控制追加到数组时发生的情况。
http://php.net/manual/en/class.arrayaccess.php
缺点是并非所有数组函数都适用于对象(即排序等),但您可以像这样推送:
$object[] = 'new value';
另一种方法是简单地创建一个包装函数来添加到数组中。
public function addToArray($key, $value) {
if ($key === null) {
$this->test[] = 'My extra value ' . $value;
} else {
$this->test[$key] = 'My extra value ' . $value;
}
}
关于php 捕捉 array_push 的魔术方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094007/