【问题标题】:Php typehinting in called method of object, created in base class在基类中创建的对象调用方法中的 PHP 类型提示
【发布时间】:2017-09-08 17:50:03
【问题描述】:

我有以下情况:

class Main {
   function get() {
       return new Query();
   }
}

class Order extends Main {
    public $id;
    public $name;
}

class Query {
    /**
     * @return Main
     */
    function execute() {
        /// some code here
        return $parsedObject;
    }
}

当我使用此代码执行()并获取订单对象(作为解析对象)时,我正在编写:

$order = new Order();
$result = $order->get()->execute();
$result->id; /// typehint not works, cuz $result is type of Main, not more concrete type Order

所以我的问题是 - 有没有办法将一种基(抽象类、接口)类实现传递给从该基类调用的方法,以获得创建对象的漂亮类型提示。因为我可以用他自己的字段创建扩展主类的用户。但是调用 new User()->get()->excute() 会给我同样的结果——一个 Main 类型的对象

【问题讨论】:

  • $result->$id 无论如何都不起作用,首先它是$result->id 但由于该属性是私有的,因此您无法直接访问它。
  • 假设 props 可以公开访问,$result 调用 id prop。这不是问题的主要思想
  • 我已经编辑了我的帖子,谢谢

标签: php phpdoc type-hinting


【解决方案1】:

您几乎可以注释任何内容,这是您的代码,所有内容都已注释。

/**
 * Class Main
 */
class Main {

    /**
     * @return Query
     */
   function get() {
       return new Query();
   }
}

/**
 * Class Order
 */
class Order 
    extends Main {

    /** @var int */
    public $id;

    /** @var string */
    public $name;
}

/**
 * Class Query
 */
class Query {

    /**
     * @return Main
     */
    function execute() {
        /// some code here
        return $parsedObject;
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2017-11-21
    • 2023-03-22
    • 2020-01-19
    • 2016-01-19
    • 1970-01-01
    • 2022-01-03
    • 2011-01-11
    • 2011-03-11
    相关资源
    最近更新 更多