我有两个涉及组合而不是继承的类。A 类和 B 类。A 类的属性之一是 B 类对象的数组。A 类有一个公共方法A::getName()
。B 类也有一个同名的公共方法。A类的方法如下:
public function getName()
{
return $this->_name;
}
我的问题是当我在 B 类中并尝试访问 A 类的这个公共方法时,我得到“无法访问受保护的属性”错误。$_name
是每个类中的私有属性。例如,A 类是表单的名称,B 类是字段的名称。
这是生成错误的代码(B 类的构造函数):
public function __construct($name)
{
$this->foo = A::getName() .'-'. $name;
}
为什么不允许我访问 A 类的公共方法 getName()?有什么办法可以解决或解决这个问题?
使固定:
我意识到我正在静态调用 A 类的方法,尽管我需要单独处理每个对象,因为每个对象都有一个唯一的名称。为了解决我的问题,我为 B 类提供了一个公共集合函数作为唯一名称,并在 A 类中调用它:
class A
{
...
$this->list[$B_name] = new B($B_name);
$this->list[$B_name]->setID($this->_name, $B_name);
}
class B
{
...
public function setID($name, $subName)
{
$this->foo = $name .'-'. $subName;
}