在基类中创建的对象调用方法中的 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 中,为啥可以在同一类类型的方法中创建的新实例上调用私有方法? [复制]