Ich habe eine Klasse Resource
aber mit einem voll qualifizierten Namen wie com.example/objects/Resource
PHPDoc Type Hinting überlappende Typen
genannt Wenn ich eine Datei
use com.example/objects/Resource;
/**
* Do something
*
* @param Resource $r
*/
function myfunc(Resource $r) {
$r->something();
}
$x = new Resource();
myfunc($x);
Dann fein funktioniert alles schreiben. Wegen meiner use
Aussage ist das PHP typehinting der Lage, die die Tatsache umgehen, dass ich eine Variable vom Typ bestanden habe com.example/objects/Resource
obwohl myfunc nur den Vergleich gegen Resource
Das Problem ist, dass PhpStorm nicht in der Lage ist, dies zu umgehen. Ich kann die automatische Vervollständigung nicht verwenden und erhalte eine Warnung an myfunc($x)
, die Expected Resource, got Resource
und eine Warnung innerhalb der Funktion sagt, die Method 'something' not found in the class Resource
sagt. Offensichtlich geht PHPSstorm davon aus, dass ich die eingebaute Klasse resource
und nicht meine eigene Klasse Resource
verwende.
Wenn ich die PHPDoc und die Funktionsdefinition ändern, um den voll qualifizierten Namen zu verwenden, gehen die vorherigen Warnungen weg, aber ich bekomme eine kleine Warnung, die besagt Unnecessary fully qualified name.
Ich nehme an, eine Lösung wäre, den voll qualifizierten Namen zu verwenden und die kleine Warnung, aber ich würde lieber nicht vollständig qualifizierte Namen überall verwenden müssen. Ich weiß, dass es meine eigene Schuld ist, eine Klasse zu erstellen, die den gleichen Namen wie ein eingebauter Typ hat, aber ich frage mich, ob es trotzdem etwas gibt, damit das funktioniert? Abgesehen von der Umbenennung meiner Resource
Klasse?
Verwenden Sie Alias. z.B. 'Verwenden Sie com.example/objects/Resource als MyResource;' – LazyOne
verwenden Sie "\" anstelle von "/" in Namespaces ^^. –