【问题标题】:Magic Method in PHP for triggering method when a declared property is set?PHP中的魔术方法用于在设置声明的属性时触发方法?
【发布时间】:2012-01-02 05:57:21
【问题描述】:

我有一个带有声明属性的类。该类及其扩展的重点是我需要它们在不同的对象上始终可用,即使为空。所以它看起来像:

class Wrapper {

     public $a = "";
     public $b = "";
     public $c = "";

    public function Wrapper() {

        $this -> wrapped = new Wrapped();

        foreach($this as $key => $val) {
              if($key != 'wrapped') {
                 $this -> wrapped -> $key = $val;
              }
        }

    }
}

但是在实例化对象之后,我希望能够直接覆盖声明的值,所以:

 $wrap_test = new Wrapper();
 $wrap_test -> a = 12;

因此,我没有编写方法或使用$wrap_test -> wrapped -> a -> 12,而是寻找与 __set() 等效的方法,只要设置任何属性,它就会调用方法。

这存在吗?

【问题讨论】:

    标签: php oop magic-methods


    【解决方案1】:

    如果您的属性声明为public,则没有“事件”或其他可以挂钩的方法。任何人都可以直接更改属性。

    将您的属性声明为protectedprivate,这样它们就不能直接从类外部更改,然后实现__get__set 方法,这样您就可以像访问@987654326 一样访问这些属性@。在__set方法中,当属性发生变化时,做任何你需要做的事情。

    【讨论】:

    • 完美。现在唯一的问题是当我从类本身中设置一个属性时。不过,我想我对此有一个想法……
    • 这是我想出的(这样可以避免静态变量进入):` $og_properties = array_keys(array_intersect(get_class_vars(get_class($this)), get_object_vars($this))); if(!in_array($name, $og_properties)) { $this -> $name = $value; } 其他 {`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2023-03-14
    • 2010-10-27
    相关资源
    最近更新 更多