0

システムがまだ正常に機能しているにもかかわらず、エラー ログが突然次のようなエラーであふれています。

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); 
    }
}

誰でもこれについて何か考えがありますか?

4

3 に答える 3

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
      ...
  }
}
于 2012-07-20T03:31:18.423 に答える
0

PHP5.4 では、これは、子クラスが親クラスのメソッドをオーバーライドし、親クラスとは異なる署名を持つ場合に発生します。

E_STRICT のエラーの表示を無効にすると、解決されます。

于 2013-12-16T18:46:29.477 に答える
0

すべてのサブクラスを変更したくない場合は、親クラスで行うことができます。

abstract class Core_Model_Item_Abstract 
{
  public function getParent()
  {

  }
}
于 2012-07-20T04:46:39.337 に答える