首页 / PHP / PHP-类型提示抽象类单例
PHP-类型提示抽象类单例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-类型提示抽象类单例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1150字,纯文字阅读大概需要2分钟。
内容图文
![PHP-类型提示抽象类单例](/upload/InfoBanner/zyjiaocheng/685/42589576b71643d68bfc2fe02c1d5077.jpg)
一个Type Hint如何在抽象类上返回一个静态单例返回方法,该方法返回被扩展类的实例?
例如,让我们看下面的代码:
<?php
abstract class Foo {
/** @return Foo */
public function init() {
static $instance;
if ( is_null($instance) ) {
$class = get_called_class();
$instance = new $class();
}
return $instance;
}
}
class Bar extends Foo {
public $name = "Bar name";
}
class Baz extends Foo {
public $age = 42;
}
我的目的是让PhpStorm之类的工具理解Bar :: init()返回Bar类型的对象,而Baz :: init()返回Baz类型的对象.因此,例如,从Baz :: init()方法创建的对象将自动完成name属性,而不自动完成age属性.
显然,当前类型提示@return Foo是错误的,因为该方法永远不会返回抽象类的对象实例.
解决方法:
因此@return static在这种情况下将适用于PHPStorm.这是最简单的选项,它将提供您想要的东西.
您可以选择对类使用@method注释,尽管这是非常手动的操作,需要针对每个类进行. PHPStorm中此方法还有另外一件奇怪的事情,如果您导航到init()方法(按ctrl单击或w / e),它将首先导航到该注释.但是,这是这样的:
/**
* @method Bar init()
*/
class Baz extends Foo
{
}
可以选择作为最终解决方案的地方-我真的不认为您会需要它,但是为了完整性起见.像常规方法一样扩展方法并添加返回注释.
/**
* @return Baz
*/
public function init()
{
return parent::init();
}
内容总结
以上是互联网集市为您收集整理的PHP-类型提示抽象类单例全部内容,希望文章能够帮你解决PHP-类型提示抽象类单例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。