实际上,
这工作正常..但我想要父值。 不是孩子的价值..
<?php
class Fruit{
protected $parentproperty = "parentvalue";// this is parent value
}
class Orange extends Fruit{
protected $parentproperty = "child value";// here i mentioned once again
function showParentProperty(){
return self::$this->parentproperty;
}
}
$obj = new Orange;
echo $obj->showParentProperty();
//conclusion:
// i want to get the parent value not child. its working fine . but it's displaying chid value
?>
答案 0 :(得分:6)
如果你的意思是:
class Fruit {
protected $parentproperty = "parent value";
}
class Orange extends Fruit{
protected $parentproperty = "child value";
function showParentProperty(){
return $this->parentproperty; // corrected syntax here
}
}
然后没有办法做你想要的,因为PHP中的所有非静态类属性都是虚拟的。
如果父属性是静态的,您只能使用parent
关键字,如下所示:
class Fruit {
static $parentproperty = "parent value";
}
如果我们在讨论实例属性,那么你唯一能做的就是为子属性使用另一个名称。
答案 1 :(得分:2)
当您在子类中重写类属性$ parentproperty时,我认为父类的值丢失了。
答案 2 :(得分:2)
可以访问在子类中重写的父类的非静态属性的默认值:
class Orange extends Fruit
{
protected $parentproperty = "child value";
function showParentProperty()
{
$parentProps = get_class_vars(get_parent_class($this));
return $parentProps['parentproperty'];
}
}
这样,您可以访问父类的protected
和public
非静态属性,这在应用DRY原则时非常方便。
答案 3 :(得分:1)
我认为它会以这种方式运作。您可以做的是在父级中声明属性,然后只要子级扩展父级,就可以直接在子级中访问它们。然后,在子__constructor中调用父__constructor ...
class fruit{
protected $name;
protected $type;
__constructor($name, $type){
$this->name = $name;
$this->type = $type;
}//end __constructor
}//end class
class thisFruit extends fruit{
__constructor($name, $type){
parent::__constructor($name, $type);
}
}
你会用它 $ myFruit = new thisFruit(&#34; Orange&#34;,&#34; Citrus&#34;); echo&#34;这个水果是&#34;。$ myFruit-&gt;名称;
希望这会有所帮助 - 祝你好运!
答案 4 :(得分:0)
在你的孩子身上:
function showParentProperty()
{
return parent::$parentproperty;
}
答案 5 :(得分:0)
在没有静态属性的情况下执行所要求的唯一方法是使用reflexion api
答案 6 :(得分:0)
也许尝试在父类中使用__get($ value)并通过
从子调用它
public function __get($value){
if($value == 'parentValue'){
return parent::__get($value);
}else{
return $this->$value;
}
}
我在我目前的项目中使用它并且工作正常。
Kori