魔法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 更精确:
- 构造函数工作正常(创建实例的
var_dump()
显示 nom1
和 prenom1
分配良好)
- 当我尝试获取
Example_Object
实例的每个属性时,我在文章的代码中遇到了同样的错误
- 在
Personne
class 中定义魔法getter时,我没有任何错误
有人能给我解释一下这是怎么回事吗? (也许我不想做的事是不可能的)
谢谢!
问题是变量是私有的。私有变量只能从声明它们的同一个 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;
我正在关注 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 更精确:
- 构造函数工作正常(创建实例的
var_dump()
显示nom1
和prenom1
分配良好) - 当我尝试获取
Example_Object
实例的每个属性时,我在文章的代码中遇到了同样的错误
- 在
Personne
class 中定义魔法getter时,我没有任何错误
有人能给我解释一下这是怎么回事吗? (也许我不想做的事是不可能的)
谢谢!
问题是变量是私有的。私有变量只能从声明它们的同一个 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;