PHPで派生オブジェクトからベースオブジェクトを取得することは可能ですか?
このようなもの
class base {}
class derived extends base{
public function getBase()
{
return (base)$this;
}
上記のコードは、エラーをスローします
PHPで派生オブジェクトからベースオブジェクトを取得することは可能ですか?
このようなもの
class base {}
class derived extends base{
public function getBase()
{
return (base)$this;
}
上記のコードは、エラーをスローします
基本クラスの名前を取得しようとしている場合は、次の方法で取得できます。
class base {
public function getClassName() {
return "base";
}
}
class derived extends base{
public function getBaseClassName() {
return parent::getClassName();
}
public function getClassName() {
return "derived";
}
}
$d = new derived();
echo $d->getBaseClassName();
編集:継承を使用してクラスを拡張する場合(例:) 、それは一種のであり、のすべてのインスタンスはのインスタンスでもあるderived extends base
と言っています。ほとんどのオブジェクト指向言語では、2つのインスタンスは別々のエンティティではなく、別々に扱うことはできません。(C ++は、この点に関する規則の例外です)。derived
base
derived
base
base
derived
インスタンスを個別に処理する必要がある場合、継承はジョブにとって間違ったツールです。継承ではなく、包含による拡張を使用します。これは次のようになります。
class base {
public someBaseFunction() {
// ...
}
}
class derived {
/**
* each instance of `derived` *contains* an in instance of `base`
* that instance will be stored in this protected property
*/
protected $base;
/**
* constructor
*/
function __construct() {
// remember to call base's constructor
// passing along whatever parameters (if any) are needed
$this->base = new base();
// ... now do your constructor logic, if any ...
}
/**
* Here's the method that fetches the contained
* instance of `base`
*/
public function getBase() {
return $this->base;
}
/**
* If needed, `derived` can implement public elements
* from `base`'s interface. The logic can either delegate
* directly to the contained instance of base, or it can
* do something specific to `derived`, thus "overriding"
* `base`'s implementation.
*/
public function someBaseFunction() {
return $this->base->someBaseFunction();
}
/**
* of course, `derived` can implement its own public
* interface as well...
*/
public function someOtherFunction() {
}
}
parent::
親メソッド、プロパティ、または定数に解決するために使用できます。