魔法getter传承

Magic getter inheritance

我正在关注 this article 尝试让我的每个 PHP class 继承自基 class 中定义的 getter .我会发现不在每个 class 中重写魔术 getter 非常方便……(也许它有不好的后果?如果是这样,请告诉我!)问题是我有这个错误:Undefined property: Personne::$nom,我也不知道为什么。

代码如下:

class classeBase {
    public function __get($propriete) {
        if(property_exists($this,$propriete)) return $this->$propriete; 
        else return null;
    }
}
    
class Personne extends classeBase {
    private $nom;
    private $prenom;
        
    //constructor...
}
    
$p1 = new Personne(array("nom" => "nom1", "prenom" => "prenom1"));  
echo $p1->nom;
echo $p1->prenom;

3 更精确:

有人能给我解释一下这是怎么回事吗? (也许我不想做的事是不可能的)

谢谢!

问题是变量是私有的。私有变量只能从声明它们的同一个 class 访问,但您正试图从父 class.

访问它们

声明它们受保护,这允许它们可以从同一 class 层次结构中的任何 class 访问它们,无论是父级还是子级,但不能从这些 class 之外。

<?php
class classeBase {
    public function __get($propriete) {
        if(property_exists($this,$propriete)) return $this->$propriete;
        else return null;
    }
}

class Personne extends classeBase {
    protected $nom;
    protected $prenom;

    public function __construct($array) {
        foreach ($array as $key => $value) {
            $this->$key = $value;
        }
    }
}

$p1 = new Personne(array("nom" => "nom1", "prenom" => "prenom1"));
echo $p1->nom;
echo $p1->prenom;