php - 什么是 PHP 中的可解引用标量?
问题描述
最近,我在关注这个 PHP talk。关于 PHP7 中的新特性有一部分对我来说真的很奇怪(在谈话的“统一变量语法”部分),它写道:
// support all operations on dereferencable scalars
// (not very useful)
"string"->toLower()
什么是可取消引用的标量?我知道当我在非对象上调用方法时,例如:
echo "string"->toLower();
我会在 PHP7 中得到以下错误:
Fatal Error: Uncaught Error: Call to a member function toLower() on string
另外,我找不到在字符串上声明方法的方法(就像我们在 JavaScript 中看到的那样);据我所知,没有办法做到这一点。
那么,上面的代码在说什么?我们怎么能做上面的事情?它的用例是什么?笼统地说,是什么"string"->toLower()
?
注意:注意 PHP 谈话。它说这些东西存在于 PHP7 中。他犯错了吗?我不这么认为。那是由PHP 的创建者Rasmus Lerdorf 举办的一次会议。所以,请不要说“它不存在”,而要说“那是什么”。
提前致谢。
解决方案
简短的回答:这将是一个语法糖。
更长的答案:这是一种使用与对象语法一致的语法调用函数的方法。
例如,一个对象(即一个类实例)可以有一个名为“length()”的方法。此方法的调用将使用以下“箭头”语法表示:
$length = $myObject->length();
但是,例如,要获取字符串的长度,目前不能使用相同的语法,因为字符串不是对象。相反,您必须将变量名称放在括号内,作为strlen
函数的参数,即:
$length = strlen($myString);
你提到的是一个统一语法的想法,即
$length = $myString->strlen();
将是调用该函数的另一种可能的语法。strlen
这将使标量(和数组)上的操作在语法上更接近对象的方法调用。
请注意,截至 2018-09-14,PHP 尚不支持此语法。
推荐阅读
- docker - 为什么 docker system prune 没有删除悬空图像,而 docker rmi $(docker images --filter "dangling=true" -q --no-trunc) 没有
- c# - 仅用于一个控制器的 Web API 缓存 DLL 和符号文件
- java - 流的收集功能中组合器的用途是什么?
- r - 如何让 R 代码等待后台 R 会话完成?
- javascript - 模态关闭后停止 jQuery 函数
- pandas - 我想拆分字符串并只保留第一个单词
- swift - 如何从 SwiftUI 中的导航栏按钮单击导航到新视图
- java - 错误:针对 Android API 28 时找不到符号变量 CLIP_SAVE_FLAG
- jquery - 如何仅捕获文本但忽略带有元素的文本?
- xml - 如何将以下标签中的所有文本项收集到以名称为键、年份为值的字典中?