[英]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.