[英]PHPDoc type hinting overlapping types
我有一個名為Resource
的類,但具有完全限定的名稱,如com.example/objects/Resource
如果我寫一個文件
use com.example/objects/Resource;
/**
* Do something
*
* @param Resource $r
*/
function myfunc( Resource $r ) {
$r->something();
}
$x = new Resource();
myfunc($x);
然后一切正常。 由於use
語句,即使myfunc僅與Resource
進行了比較,PHP typehinting仍能夠處理我已經傳遞了com.example/objects/Resource
類型的變量的事實。
問題是PHPStorm無法處理此問題。 我無法使用自動完成功能,並且在myfunc($x)
上收到警告,提示Expected Resource, got Resource
在功能內Expected Resource, got Resource
和警告,提示在Method 'something' not found in the class Resource
。 顯然,PHPStorm假設我使用的是內置resource
類,而不是我自己的Resource
類。
如果我將PHPDoc和函數定義更改為使用完全限定名稱,則前面的警告會消失,但是會出現一條次要警告,提示Unnecessary fully qualified name.
我想一種解決方案是使用完全限定的名稱並禁用次要警告,但是我寧願不必在任何地方都使用完全限定的名稱。 我知道創建與內置類型同名的類是我自己的錯,但是我想知道是否還有其他方法可以使這項工作成功? 除了重命名我的Resource
類?
導入類時,可以使用alias
。 可以在此處找到更多信息。 例:
use com.example\objects\Resource as MyResource;
/**
* Do something
*
* @param MyResource $r
*/
function myfunc( MyResource $r ) {
$r->something();
}
$x = new MyResource();
myfunc($x);
您還可以指定整個名稱空間和類名,而不僅僅是類名。 例:
/**
* Do something
*
* @param com.example\objects\Resource $r
*/
function myfunc( com.example\objects\Resource $r ) {
$r->something();
}
$x = new com.example\objects\Resource();
myfunc($x);
如果您在命名空間中並使用此方法,請確保在完整的類名說明符上使用前導\\
(例如$x = new \\com.example\\objects\\Resource();
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.