我已经将我的机器从php 5.3更新到php5.4,而我的cakephp(版本2.1.1)应用程序不断出现以下错误:
致命错误:在第行的…/behavior.php中找不到类“string”…
致命错误:在第行…/component.php中找不到类“debugger”…
等。
这些错误实际上并不有用,因为错误的行和文件总是声明类声明的结束括号。
经过大量的搜索,我通过添加适当的公共/私有函数声明和强参数类型(也称为:
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
删除“通过引用调用时间传递”
我见过很多人通过引用在函数中传递around 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()以加载依赖项
检查您的类是否真的可用总是很好的,因此请仔细检查是否在文件开头加载了所有依赖的类。
关于php - 自PHP 5.4起在CakePHP 2.1中找不到类“X”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12267856/