php如何擷取當前類名,繼承中的問題?

來源:互聯網
上載者:User
木有標題所說的那麼簡單!!

問題是 :

PHP中 A類繼承了B類,如何在A類中擷取B類的類名

實際使用狀況是:

B類是一個基類,多個類A,C,D.....需要繼承B類.我想在B類中寫一些日誌,來記錄A類的運行情況

回複內容:

木有標題所說的那麼簡單!!

問題是 :

PHP中 A類繼承了B類,如何在A類中擷取B類的類名

實際使用狀況是:

B類是一個基類,多個類A,C,D.....需要繼承B類.我想在B類中寫一些日誌,來記錄A類的運行情況

我的方式比較簡單,在B類中定義一個屬性,B的建構函式裡__CLASS__賦值給這個屬性,子類裡調用這個屬性就知道B的類名了。
代碼:
class B{

    protected $name = '';    public function __construct(){        $this->name = __CLASS__;    }}class A extends B{    public function _show(){        echo $this->name;    }}$temp = new A();$temp->_show();

定義一個函數就行了唄。
基類和子類是可以互相調用的。

你在B類(字類)寫一個函數:

private function getChildName(){    return __CLASS__;}

你在A類(基類)調用即可:

$this->getChildName();

多個繼承要想在子類擷取父類名 1.使用反射 2.使用回調(包括子父類間調用) 3.在父類定義self類方法。

樓主提的問題好像是:

因為A,C,D都是繼承的B,但是B裡面的函數需要得到「是A,還是C」?

class Base {    public function log() {        // 目標類,輸出:A、C        echo static::class;        //echo get_called_class();        //echo get_class($this);                        // 基類,輸出:Base        //echo __CLASS__;         //echo self::class;            }}class A extends Base {}class C extends Base {}echo (new A)->log();  // 輸出: Aecho (new C)->log();  // 輸出: C

如果你的需求是在A裡面,得知繼承的誰,這可以用到反射了

// 類外獲得$a = new A();echo get_parent_class($a);//類中獲得class C extends Base {    public function log1() {       echo get_parent_class($this);    }}// 反射,取出所有extends的父級// 如上,在C類中,$a換成$this即可$class = new ReflectionClass($a);$parents = [];while ($class = $class->getParentClass()) {  // 查詢 implements 用 getInterfaces       $parents[] = $class->getName();}print_r($parents);

> 更多資訊,自己看

  • 調試

    • debug_backtrace

  • 反射

    • ReflectionClass

  • 函數

    • get_called_class

    • get_class

    • get_class_methods

    • get_class_vars

    • get_object_vars

    • get_parent_class

    • method_exists

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.