class が class を拡張する場合、 Classはクラスの保護されたメンバーB
にアクセスできます。子クラスは、親クラスの保護されたメンバーにアクセスできます。子クラスは、親クラスのメソッドをオーバーライドすることもできます。A
B
A
あるクラスが別のクラスの機能を拡張する場合、継承 (親子関係)を使用します。たとえば、 classは classsquare
を拡張できrectangle
ます。クラスsquare
には、クラスのすべてのプロパティと機能にrectangle
加えて、クラスを a とは異なる独自のプロパティと機能がありますrectangle
。
classを class に渡すことで構成を実装しています。コンポジションは、あるクラスが別のクラスを使用するために使用されます。たとえば、クラスはクラスを使用する場合があります。A
B
user
database
class A
{
protected $x = 'some content';
}
class B
{
protected $a;
public function __construct(A $a)
{
$this->a = $a;
}
public function print_x()
{
print '???';
}
}
$b = new B(new A());
$b->print_x();
推奨される読み物:
http://www.adobe.com/devnet/actionscript/learning/oop-concepts/inheritance.html
http://en.wikipedia.org/wiki/Inheritance_%28オブジェクト指向プログラミング%29
http://eflorenzano.com/blog/2008/05/04/inheritance-vs-composition/
リフレクションを使用する必要がある場合は、これを試すことができます。
class A
{
protected $x = 'some content';
}
class B
{
protected $a;
public function __construct(A $a)
{
$this->a = $a;
}
public function print_x()
{
$reflect = new ReflectionClass($this->a);
$reflectionProperty = $reflect->getProperty('x');
$reflectionProperty->setAccessible(true);
print $reflectionProperty->getValue($this->a);
}
}
$b = new B(new A());
$b->print_x();