如何在php 7.1中指示返回类型是当前的子类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在php 7.1中指示返回类型是当前的子类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1924字,纯文字阅读大概需要3分钟。
内容图文
![如何在php 7.1中指示返回类型是当前的子类型?](/upload/InfoBanner/zyjiaocheng/685/784dea75006146aab1c17a3f93de2ec9.jpg)
我有
abstract class A{
public static function getSingle($where = []) {
$classname = get_called_class();
$record = static::turnTheWhereIntoArecordFromDB($where);
$model = new $classname($record);
return $model;
}
}
class B extends A{
}
$x = B::getSingle();
$x没有类型提示…我喜欢类型提示,所以我想要B而不是A的类型提示
如何直接为$x启用类型提示?
我以为是这样的
public function getSingle($where = []) : ?get_called_class()
这显然不起作用
有什么用吗?
根据评论要求进行编辑:我在上面的原始问题中添加了我认为丢失的点点滴滴.
有关更完整的源代码,请参见下文.随意发表评论,但这实际上不是问题的一部分.我对以下代码的怀疑与如何使用该接口有关.例如. $where是[‘my_column_name’=> ‘my_column_val’]导致my_column_name =’my_column_val’并最终导致安全隐患.但是,这确实是一个糟糕的程序员ORM.
protected abstract static function get_tablename();
/**
* @param array $where
* @return static|null
*/
public static function getSingle($where = []) {
/** @var wpdb $wpdb */
global $wpdb;
$qr = static::whereToString($where);
$sql = "SELECT * FROM " .$wpdb->prefix . static::get_tablename() . " WHERE ". $qr ;
$record = $wpdb->get_row($sql);
if(!$record){
return null;
}
$classname = get_called_class();
$model = new $classname($record);
return $model;
}
/**
* @param array $where
* @return string
*/
private static function whereToString(array $where): string
{
$i = 0;
$max = sizeof($where);
$qr = '';
foreach ($where as $name => $val) {
if (is_string($val)) {
$qr .= " {$name} = '" . $val . "' ";
} else {
$qr .= " {$name} = " . $val . " ";
}
$i++;
if ($i < $max) {
$qr .= ' AND ';
}
}
return $qr;
}
解决方法:
对于您提供的示例,为什么需要使用工厂方法?您正在通过构造函数创建新实例,为什么不只是$x = new B($record)!
上面更新
abstract class A
{
/**
* @param array $where
* @return static
*/
public static function getSingle($where = [])
{
$classname = get_called_class();
$model = new $classname($record);
return $model;
}
}
@return static将类型提示其子类.我也将您的功能更改为静态功能,这是典型的工厂模式.
内容总结
以上是互联网集市为您收集整理的如何在php 7.1中指示返回类型是当前的子类型?全部内容,希望文章能够帮你解决如何在php 7.1中指示返回类型是当前的子类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。