簡體   English   中英

PHPDoc類型提示重疊類型

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

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