[英]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.