本站所搜集的资源均来源于网络,仅供学习研究代码使用,请勿商用
本站所有资源均免费下载无需付费。
登录账号后访问“个人中心”点击“我的余额”在右上角签到后即可免费下载
其资源在源站什么样下载就是什么样,并非本站制作发布,代码是否完整、是否有教程及使用说明需自行判断,本站不保证其资源可用。
本站所有资源均免费下载无需付费。
登录账号后访问“个人中心”点击“我的余额”在右上角签到后即可免费下载
其资源在源站什么样下载就是什么样,并非本站制作发布,代码是否完整、是否有教程及使用说明需自行判断,本站不保证其资源可用。
闭包非常有用,尤其是在不需要完整控制器时创建插件时,今天我在类中使用闭包并尝试使用 $this-> 时遇到了一个问题,导致出现此错误:
不在对象上下文中时使用 $this。
问题是 PHP 5.3 不允许你在闭包中使用 $this,以这个例子为例,我有一个带有控制器的方法,我试图使用 $this-> 来引用一个对象。
public function routes(){
Router::any('(:all)', function($request) {
$row = $this->_db->get_post_by_slug($request);
}
}
在 5.4+ 使用 PHP 5.3 或更低版本时,这将导致错误,它可以正常工作。那么,如果您仍在使用 5.3,为什么?最好升级到最新的稳定版本。
为了使其向后兼容并在 5.3 中工作,变量可以保存对 $this 的引用,并且可以传递/绑定到闭包。
为此,请创建一个变量并将其传递给 $this<
$class = $this;
然后对于闭包,使用 use 函数并将 $class 与 & 一起传递给它不是将其作为引用传递,而是引用实际对象。
Router::any('(:all)', function($request) use (&$class){
重要的部分是使用 (&$class),它使 $class 可用于与 $this 相同的闭包,现在我不再编写 $this->_db,而是像这样编写 $class->_db:
Router::any('(:all)', function($request) use (&$class){
$row = $class->_db->get_post_by_slug($request);
}
这使得闭包可以在 5.3 中引用主类中的对象,因为 5.4+ 不需要更改并且 $this 可以自由使用。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。