加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

自PHP 5.4以来,在CakePHP 2.1中找不到类“X”

发布时间:2020-12-13 22:04:21 所属栏目:PHP教程 来源:网络整理
导读:我已经将我的机器从 PHP 5.3更新到 PHP 5.4,我的CakePHP(版本2.1.1)应用程序不断收到这些错误: Fatal Error: Class ‘String’ not found in …/Behavior.php on line … Fatal Error: Class ‘Debugger’ not found in …/Component.php on line … 等等.
我已经将我的机器从 PHP 5.3更新到 PHP 5.4,我的CakePHP(版本2.1.1)应用程序不断收到这些错误:

Fatal Error: Class ‘String’ not found in …/Behavior.php on line …

Fatal Error: Class ‘Debugger’ not found in …/Component.php on line …

等等.

错误实际上没用,因为错误的LINE和FILE总是声明类声明的结束括号.

经过大量的搜索,我设法通过添加适当的公共/私有函数声明和强参数类型来解决一些错误,A.K.A.:

function beforeSave($Model) {}

//becomes
public function beforeSave(Model $Model){}

解决方法

转移到PHP5.4后,您必须清除代码中的许多“不良做法”.

扩展方法中的强类型参数定义

这意味着您必须编写方法在变量名称之前接收的对象的类.这仅适用于替换父类方法的方法,而不适用于所有方法.如果不确定,只需检查核心文件或API中父类的方法声明.

// Behavior code
public function afterSave(Model $model,$created) //GOOD 
function aferSave($model) //NOT GOOD
// Component code
public function shutdown(Controller $Controller) // GOOD
function shutdown($Controller) // BAD

删除“通过引用传递呼叫时间”

我见过很多人在函数BY REFERENCE中传递arround Controller和Model对象:

function beforeSave(&$Model)

这会引发错误并且错误.
只需删除变量前的&符号.你不会破坏任何功能,因为对象已经在PHP中通过引用传递,并且我得到它,this was removed in PHP 5.4.

在扩展方法中声明所有方法参数

如果覆盖父类的方法,则应在函数定义中声明所有函数参数.如果缺少参数,则会出现错误.

例:

SomeBehavior extends ModelBehavior
public function afterSave(Model $Model){ } //WRONG,but works in 5.3
public function afterSave(Model $Model,$created){ } //RIGHT,works everwhere :)

添加App :: load()以加载依赖项

总是很好检查你的类是否真的可用,所以请仔细检查你是否在文件开头的App::load()中加载了所有依赖的类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读