即使我的系统仍在正常运行,我的错误日志也会突然出现以下错误:
2012-07-20T02:53:25+00:00 WARN (4): [2048] Declaration of User_Model_User::getParent() should be compatible with Core_Model_Item_Abstract::getParent($recurseType = NULL) ([…]/application/modules/User/Model/User.php) [20]
Error Code: 1b29e1
Stack trace:
#0 […]/application/libraries/Engine/Loader.php(103): include_once('/dana/data/www.altandetlige.dk/d...')
#1 (unknown file)(0): Engine_Loader::autoload('User_Model_User')
#2 (unknown file)(0): spl_autoload_call('User_Model_User')
#3 […]/application/libraries/Zend/Db/Table/Rowset/Abstract.php(114): class_exists('User_Model_User')
#4 […]/application/libraries/Zend/Db/Table/Abstract.php(1340): Zend_Db_Table_Rowset_Abstract->__construct(Array)
#5 […]/application/libraries/Zend/Db/Table/Abstract.php(1290): Zend_Db_Table_Abstract->fetchAll('((`engine4_users`.`user_id` = 1)...')
#6 […]/application/modules/User/Api/Core.php(334): Zend_Db_Table_Abstract->find(1)
#7 […]/application/modules/User/Api/Core.php(167): User_Api_Core->_getUser(1)
#8 […]/application/modules/User/Bootstrap.php(34): User_Api_Core->getViewer()
#9 […]/application/modules/Core/Bootstrap.php(783): User_Bootstrap->__construct(Core_Bootstrap)
#10 […]/application/libraries/Engine/Application/Bootstrap/Abstract.php(256): Core_Bootstrap->_initModules()
#11 […]/application/libraries/Engine/Application/Bootstrap/Abstract.php(207): Engine_Application_Bootstrap_Abstract->_executeResource('modules')
#12 […]/application/libraries/Engine/Application/Bootstrap/Abstract.php(150): Engine_Application_Bootstrap_Abstract->_bootstrap()
#13 […]/application/libraries/Engine/Application.php(149): Engine_Application_Bootstrap_Abstract->bootstrap()
#14 […]/application/index.php(193): Engine_Application->bootstrap()
#15 […]/index.php(24): include('/dana/data/www.altandetlige.dk/d...')
#16 {main}
使用Core_Model_Item_Abstract的所有模型都会产生完全相同的错误。
奇怪的是,错误只显示在生产服务器上(运行PHP 5.4.3)而不是开发设置(运行PHP 5.2.11)。
从错误中可以清楚地看出,Core_Model_Item_Abstract似乎没有得到预期的参数,但是没有对Core_Model_Item_Abstract进行任何更改,如果是这样的话,它将在生产和开发中正确显示。
[编辑]
Core_Model_Item_Abstract
中的父类看起来像这样。对我而言,似乎代码已经考虑到$recurseType
未设置:
public function getParent($recurseType = null) {
if( empty($recurseType) ) $recurseType = null; // Parent and owner are same
if( !empty($this->_parent_is_owner) ) {
return $this->getOwner($recurseType);
}
}
有人对此有任何想法吗?
答案 0 :(得分:2)
更改
class User_Model_User {
function getParent() {
...
到
class User_Model_User {
function getParent($recurseType = NULL) {
...
问题应该消失。此更改不会破坏任何内容,但只会安静您的日志。
或者你可以这样做:
abstract class Core_Model_Item_Abstract
{
public function getParent(/*$recurseType = NULL*/)
{
$recurseType = NULL; # forcing to null as no one is passing this parameter
...
}
}
答案 1 :(得分:0)
如果您想避免更改所有子类,可以在父类中执行。
abstract class Core_Model_Item_Abstract
{
public function getParent()
{
}
}
答案 2 :(得分:0)
在PHP5.4中,如果子类重写父类中的方法并且与父类具有不同的签名,则会发生这种情况。
如果您禁用显示E_STRICT的错误,它将得到解决。