En ce qui concerne cette publication:type PHPStorm laissant entendre sous-classes de baseclass
celui-ci est d'environ un cas limite dans typage PHPStorm. S'il vous plaît essayer de suivre - je ferai de mon mieux pour être aussi clair que possible:
Alors, j'ai cette classe abstraite base:
abstract class myBaseController {
protected $_model;
...
}
une autre classe qui hérite de:
class myController extends myBaseController {
$hello = 'hello';
...
}
et qui est encore prolongée par une troisième classe:
class myNewController extends myController {
public $myvar;
$this->_model = new myModel();
...
public function myFunc(){
// !!form is underlined as: "Method 'form' not found in class"!!
$form = $this->_model->form($new_variable);
}
Ci-dessous est un échantillon de la classe myModel:
class myModel extends BaseModel {
$world = 'world';
public function form($my_variable) {
do_something();
}
Ma vraie question est de savoir comment bien « phpdoc » ce scénario:
Une sous-classe myNewController
utilise une variable héritée _model
pour attribuer une instance d'une autre classe myModel
qui a une fonction unique form
. Comment PHPStorm doit-il savoir correctement à propos de form
dans myNewController
?
Ma solution ce jour consiste à documenter myBaseController
comme ceci:
abstract class myBaseController {
/**
* @var object
*/
protected $_model;
...
}
Cependant, je pense @var object
est trop large (PHPStorm ne trouvera pas sa déclaration) et je suppose qu'il devrait y avoir un meilleur (et plus spécifique) façon de le faire.
Peut-être que nous pourrions faire à la place:
/**
* @var BaseModel
*/
si PHPStorm avait une façon de regarder dans les sous-classes pour la méthode.
Des idées? Merci d'avance.
Essayez: '/ ** * @var $ variableName ClassName * /' – vaso123
@lolka_bolka Si je le fais, ça marchera, mais '$ _model' se verrouillera à' ClassName'. '$ _model' devrait être libre d'être assigné à l'une de mes classes de modèles où chacune peut avoir des méthodes uniques. Par conséquent, je devrais - idéalement - documenter '$ _model' depuis la sous-classe' myNewController'. – kstratis
Pourriez-vous commenter sur le downvote? – kstratis