【问题标题】:PhpStorm property annotation for instance of class类实例的 PhpStorm 属性注释
【发布时间】:2016-08-11 20:48:05
【问题描述】:

我知道我可以像这样使用 PhpStorm 注释:

/**
 * Class Model
 * @property string name
 */
class Model {};

$modelInstance = new Model();
$modelInstance->name;

当我输入$modelInstance->时,PhpStorm 会在自动完成中为我提供“名字”。

是否可以为类的实例创建自定义属性注释?

/**
 * Class Model
 * @property string name
 */
class Model {};

/**
 * @var Model $modelInstance @property text
 */
$modelInstance = new Model();
$modelInstance->text; //PhpStorm does not know about this property

我想在 PhpStorm 自动完成中拥有属性“文本”,但仅适用于 $modelInstance。并非适用于 Model 类的每个实例。

【问题讨论】:

  • 不。 @property 可以在 PHPDoc 块中为 class only 声明。如果您需要类似的东西..那么我可以建议的最好的方法是声明自定义类来扩展您的Model
  • 我想在从数据库中选择数据时将它与 Dibi 返回的 DibiRow 对象一起使用。这样我就可以告诉 phpstorm 我选择了哪些列 - 我的 DibiRow 实例中有哪些属性可用。
  • 嗯...这仅适用于 PhpStorm ...所以您可以尝试一下,看看它会如何为您做:1) 创建您自己的类 MyClass extends DibiRow 并在那里声明此类自定义属性; 2) 每当您需要使用它时,请使用/** @var MyClass $modelInstance */ -- 此 PHPDoc 注释将仅由 IDE 使用; 3) 将具有此类自定义类的文件放置在项目中的任何位置(例如.phpstorm 文件夹等)——它将仅由 IDE 使用。
  • 这种解决方案的缺点非常简单——所有这些额外的动作只是为了 IDE 帮助您完成代码。这是您必须为使用魔术方法/访问不存在的属性(适合每种情况的一类)付出的代价之一。另一方面——为每个数据库实体使用自己的实体类无论如何都是一个很好的解决方案。
  • 这真的很酷。我可以接受您的评论作为最终答案。 :)

标签: autocomplete annotations phpstorm


【解决方案1】:

这是我基于 LazyOne 的意见的解决方案。

/**
 *
 * Class ZboziDibiRow
 * @property int id
 * @property string name
 * @property string store
 * @property string uri
 * @property string manufacturer
 * @property string description
 * @property int price
 * @property string ean
 * @property string code
 * @property int available_in
 * @property string zbozi_category_id
 * @property string category_recursive_id
 */
class ZboziDibiRow extends DibiRow
{
}

现在当我有类似的东西时:

/**
* @var ZboziDibiRow[]
*/
public $products;

我会自动完成:

$zbozi = new Zbozi();
foreach ($zbozi->products as $key => $product) {
    $product-> ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多