簡體   English   中英

重載__set以使用它的類中的任何一個

[英]Overloading __set to use whichever is in it's class

如果要更改的變量在抽象類中聲明,並且如果要更改的變量屬於擴展抽象類的類,則運行不同的__set,是否可以執行抽象類中的__set方法。 我確定我會以錯誤的方式解決這個問題,任何幫助都會受到贊賞。

abstract class abstract_class {
    protected $protected_var;

    function __set($name, $value)
    {
        echo "abstract __set";
    }
}

class regular_class extends abstract_class {
    private $temp;

    function __set($name, $value)
    {
        echo "regular __set";
    }
}

$class = new regular_class();
$class->protected_var = "value";

在上面的例子中,我希望輸出“abstract __set”而不是輸出“regular __set”。

class Base
{
    protected $a = "a";

    public function __set($name, $value)
    {
        echo "base";
    }
}

class Child extends Base
{
    private $b = "b";
    public function __set($name, $value)
    {
        if (property_exists(get_parent_class(), $name))
            parent::__set($name, $value);
        else
            echo "child";
    }
}

$obj = new Child();

$obj->a = 1;
$obj->b = 1;

這是解決方案

記住,總是當你創建任何類的子進程並想要重載__set時,你需要1st來檢查屬性是否在父類中,否則它將無法正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM