簡體   English   中英

當在構造函數中使用鍵入的參數時,php 5.3 get_class不會返回類名

[英]php 5.3 get_class doesn't return class name when typed paremeters are used in constructor

在我的一個項目中,我使用的是doctrine2,其中存在一個EntityManger,其實體類名稱如下:

$entityManager->getRepository('\Application\Entity\Book')

如您所見,此名稱在引號內,這使得使用IDE進行重構變得困難。

在php中,有一個get_class方法,我可以使用以下方法獲取特定類的名稱:

get_class(new somenamespace\someclass);

但是,這僅在類在構造函數中沒有類型化參數的情況下才有效:

namespace model;

class ClassWithConstructorArguments {

    /**
     * 
     * @param \ArrayObject $arg1
     * @param \ArrayObject $arg2
     */
    function __construct(\ArrayObject $arg1, \ArrayObject $arg2) {

    }

}

據我了解,該函數是獲取對象的類名,但是我不能創建該對象,因為構造函數需要某些參數。

所以我的問題是:有沒有辦法獲取上面一個類的類名?

更新:由於我要使用的類是生成的類,因此修改它們不是最佳選擇,因此現在我將創建如下的適配器類:

namespace Application\Adapter;

class BookAdapter extends \Application\Entity\Book {

    public static function className() {
        return get_parent_class();
    }

}

但是我仍然想知道是否有更好的解決方案,因為這樣我就必須為每個新的實體類創建適配器類。

php.ini文件中的disable_functions中刪除get_class字符串。 或者,您可以在類中使用__CLASS__常量。

namespace model;

class ClassWithConstructorArguments {

    /**
     * 
     * @param \ArrayObject $arg1
     * @param \ArrayObject $arg2
     */
    function __construct(\ArrayObject $arg1, \ArrayObject $arg2) {

    }

    public function getClass() {

        return __CLASS__;
    }

}

$obj = new ClassWithConstructorArguments(/* ... */)
echo $obj->getClass();

暫無
暫無

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

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