php 捕捉 array_push 的魔术方法

标签 php arrays magic-methods array-push

我正在寻找一种方法来拦截 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/

相关文章:

php - 更新 SQL 列

python - 我应该直接使用python魔术方法吗?

python - 可哈希类与 Python 中的 Enum 的交互

php - 无权使用 Datastream 错误消息(皇家邮政运输 API)

php - Paypal ipn - 空的 IPN 和错误的日期。曾经工作

php - 服务器负载 : mySQL vs PHP Functions

c - 如何从c中的void函数返回动态数组?

java - 递归迷宫求解器方法问题

javascript - 检查数组中是否存在元素而不迭代它

python - 粒子实例没有属性 '__getitem__'