我很确定没有办法,但想检查/确认。
我可以通过函数传入道具,但这需要更改一组我宁愿不更改的函数。我正在使用 php 5.3。
例如:
<?php
class A{
public function accessProps(){
echo "about to show props<br />";
// cant access, child::?
var_dump($this->props);
}
}
class B extends A{
//want this accessible in parent class
public $props=array('green','blue','red');
public function sayHello(){
echo 'hello ';
var_dump($this->props);
}
}
$b=new B();
$a=new A();
$b->sayHello();
$a->accessProps();
?>
编辑 - 我喜欢反射的想法,但对于只为这一种情况添加反射会有点犹豫。也许最简单/最简单的方法是在需要它的类中传递道具,并将其作为构造器中的可选参数。这样,不需要它的类就没有变化,而确实需要它的类也无需访问。我认为应该这样做。喜欢这个:
class A{
public function __construct($props=null){
if($props){
$this->props=$props;
}
}
}
class B extends A{
public $props=array('green','blue','red');
public function __construct(){
parent::__construct($this->props);
}
简短回答是。
更长的答案,你这样做的方式,没有。
详细答案:
他们的方式是你写的,这是不可行的,因为A班对孩子一无所知。但是如果你在A类中有一个二传手,那么你可以这样使用SPL:
class A{
public function accessProps($child){
$reflect = new ReflectionClass($child);
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED);
}
}