我需要一个父类来访问它的子属性:
class Parent {
private $_fields = null;
public function do_something() {
// Access $_fields and $child_var here
}
}
class Child extends Parent {
private $child_var = 'hello';
}
$child = new Child();
$child->do_something();
Run Code Online (Sandbox Code Playgroud)
当$_fields从子范围修改,它仍然是null在父范围.当尝试使用父范围访问$ child_var时$this->child_var,它当然是未定义的.
我没有找到任何类似"函数集"的内容,只会在子类中复制...
gil*_*den 14
看一篇关于可见性的文章.
基本上,您无法访问父级的private属性/方法,父级也无法访问其子级.但是,您可以声明您的属性/方法protected.
class Parent {
protected $_fields = null;
public function do_something() {
// Access $_fields and $child_var here
}
}
class Child extends Parent {
protected $child_var = 'hello';
}
$child = new Child();
$child->do_something();
Run Code Online (Sandbox Code Playgroud)
尝试从base(父)类访问子值是一个糟糕的设计.如果将来有人会根据您的父类创建另一个类,忘记创建您尝试在父类中访问的特定属性,该怎么办?
如果你需要做类似的事情,你应该在父类中创建属性,然后在子类中设置它:
class Parent
{
protected $child_var;
private $_fields = null;
public function do_something()
{
// Access $_fields and $child_var here
//access it as $this->child_var
}
}
class Child extends Parent
{
$child_var = 'hello';
}
$child = new Child();
$child->do_something();
Run Code Online (Sandbox Code Playgroud)
基本上在父母中你不应该引用特定于孩子的内容,因为你不能确定它会在那里!
如果必须,你应该使用抽象:
| 归档时间: |
|
| 查看次数: |
16794 次 |
| 最近记录: |