簡體   English   中英

讓父母在PHP中擴展類

[英]get parent extends class in php

我有oop php代碼:

class a {
    // with properties and functions
}

class b extends a {
    public function test() {
        echo __CLASS__; // this is b
        // parent::__CLASS__ // error
    }
}

$b = new b();
$b->test();

我有一些父類(普通和抽象)和許多子類。 子類擴展了父類。 因此,當我在某個時候實例化孩子時,我需要找出我叫什么父母。

例如,函數b::test()將返回a

我怎樣才能獲得(從我的代碼)類a從我的b類?

謝謝

您的代碼建議您使用parent ,這實際上是您所需要的。 問題在於神奇的__CLASS__變量。

文檔指出:

從PHP 5開始,此常量返回聲明的類名稱。

這就是我們所需要的,但是正如在php.net上的注釋中所指出的:

claude指出__CLASS__始終包含被調用的類,如果您希望讓調用該方法的類使用get_class($ this)代替。 但是,這僅適用於實例,不適用於靜態調用。

如果只需要父類,那么還有一個函數。 那個叫get_parent_class

您可以使用get_parent_class

class A {}
class B extends A {
  public function test() {
    echo get_parent_class();
  }
}

$b = new B;
$b->test(); // A

如果B::test是靜態的,這也將起作用。

注意:使用不帶參數的get_parent_class與將$this作為參數傳遞之間存在細微的差別。 如果將上述示例擴展為:

class C extends B {}

$c = new C;
$c->test(); // A

我們將A作為父類(B的父類,在其中調用該方法)。 如果您始終想要您要測試的對象的最接近的父對象,則應改用get_parent_class($this)

class a {
  // with propertie and functions
}

class b extends a {

   public function test() {
      echo get_parent_class($this);
   }
}


$b = new b();
$b->test();

您可以使用反射來做到這一點:

代替

parent::__CLASS__;

使用

$ref = new ReflectionClass($this);
echo $ref->getParentClass()->getName();

請改用class_parents 它會給很多父母。

<?php
class A {}
class B extends A {
}
class C extends B {
    public function test() {
        echo implode(class_parents(__CLASS__),' -> ');
    }
}

$c = new C;
$c->test(); // B -> A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM