継承ではなく構成を含む 2 つのクラスがあります。クラス A とクラス B です。クラス A のプロパティの 1 つは、クラス B オブジェクトの配列です。クラス A には public メソッドがありA::getName()
ます。クラス B にも同じ名前の public メソッドがあります。クラス A のメソッドは次のとおりです。
public function getName()
{
return $this->_name;
}
私の問題は、クラス B にいて、クラス A のこのパブリック メソッドにアクセスしようとすると、「保護されたプロパティにアクセスできません」というエラーが表示されることです。$_name
各クラスの私有財産です。クラス A は、たとえばフォームの名前であり、B の場合はフィールドの名前です。
これは、エラーを生成するコードです (クラス B のコンストラクター)。
public function __construct($name)
{
$this->foo = A::getName() .'-'. $name;
}
クラス A の public メソッド 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;
}