在基类中创建的对象调用方法中的 PHP 类型提示

Posted

技术标签:

【中文标题】在基类中创建的对象调用方法中的 PHP 类型提示【英文标题】:Php typehinting in called method of object, created in base class 【发布时间】: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。这不是问题的主要思想 我已经编辑了我的帖子,谢谢 【参考方案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;
    

【讨论】:

以上是关于在基类中创建的对象调用方法中的 PHP 类型提示的主要内容,如果未能解决你的问题,请参考以下文章

在基类中创建派生类的对象

基类 派生类 类的继承与约束

在 PHP 中,为啥可以在同一类类型的方法中创建的新实例上调用私有方法? [复制]

创建一个基类方法,根据调用该方法的子类实例化一个新的子类对象

mypy:基类没有属性x,如何在基类中键入提示

如果我在 package1 中有带有受保护方法的基类