【问题标题】:Change variable type phpDoc更改变量类型 phpDoc
【发布时间】:2017-12-14 17:48:11
【问题描述】:

我有一个基类,它有几个继承自它的类。

class Pet{
  ...
}
class Dog extends Pet{
   ...
}
class Cat extends Pet{
   ...
}

然后我有另一个使用这个类的类

class Person{
   /** @var Pet */
   public $pet;
}

这些类基于我将收到的一些 JSON 对象。 JSON 对象可以包含 Dog 对象或 Cat 对象。我运行switch 语句来确定它在运行时是哪个并适当地处理它。但是,我想通过 PHPDoc 进行类型提示,以确定它是猫还是狗。我一直无法弄清楚如何在运行时指定它的类型已从Pet 更改为Dog。这不起作用 - 它仍然认为这是一个普通的旧 Pet 对象。

$pet = json_decode($jsonObj);
if($pet->type == "dog"){
   /** @var Dog */
   $pet = $pet;
}

知道如何在运行时使用 PHPDoc 将类型更改为子类型吗?

【问题讨论】:

    标签: php phpdoc


    【解决方案1】:

    您可以使用instanceof

    if ($pet instanceof Dog) {
        $dog = $pet;
        //now the IDE and runtime knows it is a Dog.
    } elseif ($pet instanceof Cat) {
        $cat = $pet;
        //now the IDE and runtime knows it is a Cat.
    }
    

    仅使用 DocBlock 的另一种方式:

    if ($pet->type === "dog") {
    
        /** @var Dog $dog */
        $dog = $pet;
        //now the IDE knows it is a Dog (at runtime this could be a Cat too).
    
    } elseif ($pet->type === "cat") {
    
        /** @var Cat $cat */
        $cat = $pet;
        //now the IDE knows it is a Cat (at runtime this could be a Dog too).
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 2014-08-15
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多