我在多种情况下运行,我想要自动完成自动完成,但只有指定类的类型才能编写PHPDoc。这种方法是不是很难闻,或者我将来会遇到一些严重的问题?以下是需要PHPDoc的代码:
/** @var genericTruck $pageObject */
$pageObject = new $pageClass();
echo $pageObject->drive();
/** @var truckViewModel $model */
foreach ($this->view as $model)
{
echo "<tr>
<td>$model->name</td>
<td><img src='$model->photo'/></td>
</tr>";
}
这里$ this-&gt; view是一个数组,其中truckViewModel实例由array_push放在另一个类方法中。
答案 0 :(得分:0)
你可以这样输入提示;但是有更好的方法来记录你想要实现的目标。
据推测,$pageClass
被注入某个地方,除非你对此进行验证,否则任何调用代码都会注入其他内容。例如,您可能期望某些基类型为Model
,而是给予CompletelyUnrelatedClass
,因此您的$ pageObject`相当不可靠。
在这种情况下,您最好在基本界面上进行类型提示,该界面显示您的函数/对象的最小行为。
这是一个人为的例子
class MyClass{
public function doDrivingWith(\MyCode\DrivableInterface $drivable)
{
//... do things with $drivable.
}
//... or with your specific example:
public function renderSomething() {
/* @var \MyCode\RenderableInterface $pageObject */
$pageObject = new $pageClass;
// $pageObject->anyRenderableMethods(); // only call methods from the interface.
}
}
理论上,您的代码应该只调用DrivableInterface
定义的方法。
这导致能够使用dependency injection而不是变量类名称来实例化通常被认为更清晰的对象的方式。
答案 1 :(得分:-1)
这正是你应该怎么做的。对于$pageObject
,它是一个变量类型,你应该提示一个所有类型都会扩展或实现的共同祖先或接口。
我不确定genericTruck
是否遵循类命名约定标准(根据大多数准则应该Generic_Truck
或GenericTruck
等),但这是您的决定。
依赖PHPDoc进行类型提示或指导,没有什么奇怪或可疑的。通常的做法是使用它,它不会很快消失。