誰かがすでに配置しているクラス関数にアクセスして、フィールドのIDを照会しています。結果は、保護されたメンバー変数とともに返されるオブジェクトです。クラス外のメンバー変数値にアクセスする方法を見つけるのに苦労しています。
クラスに「get」メソッドを追加するだけです。
class Foo
{
protected $bar = 'Hello World!';
public function getBar()
{
return $this->bar;
}
}
$baz = new Foo();
echo $baz->getBar();
Publicからprotectedまたはprivate変数にアクセスするのは正しくありません(そのため、それらはprotectedまたはprivateです)。したがって、クラスを拡張して必要なプロパティにアクセスするか、getterメソッドを作成して公開することをお勧めします。ただし、拡張せずにプロパティを取得したい場合や、PHP 5)を使用している場合は、 Reflection クラスにアクセスできます。実際には ReflectionProperty を試してください。 =クラス。
class Foo { protected $bar; }
$foo = new Foo();
$rp = new ReflectionProperty('Foo', 'bar');
$rp->setAccessible(true);
echo $rp->getValue($foo);
正解は次のとおりです。
Closureクラスのbind()またはbindToメソッドを使用して、次のようなクラスのプライベート/保護されたデータにアクセスできます。
class MyClass {
protected $variable = 'I am protected variable!';
}
$closure = function() {
return $this->variable;
};
$result = Closure::bind($closure, new MyClass(), 'MyClass');
echo $result(); // I am protected variable!
クラス外のメンバー変数値にアクセスする方法を見つけるのに苦労しています。
できません:それがprotected
の要点です。
変数をフェッチするメソッドを使用して、クラスをextend
する必要があります。
ただし、インスタンス化されたオブジェクトでこれを行うことはできません。クラス定義に影響を与えるか、オブジェクトが作成された時点でオブジェクトのクラスを変更する必要があります。
保護されたメンバークラスを拡張せずに、また保護されたメンバークラスの機能を使用せずに、クラス外のクラスの保護されたメンバーにアクセスできます。以下の機能を使用してアクセスしてください。
function getProtectedMember($class_object,$protected_member) {
$array = (array)$class_object; //Object typecast into (associative) array
$prefix = chr(0).’*’.chr(0); //Prefix which is prefixed to protected member
return $array[$prefix.$protected_member];
}
詳細については、 リンク をご覧ください。
その値が本当に必要な場合:
明らかに、クラス設計者は、アクセスしようとしている値が必要だとは考えていませんでした。そうでなければ、自分で値を取得するメソッドを追加していたでしょう。したがって、あなたがしていることを再考してください。