-1

功能有call_user_func_array()变化PHP 5.3吗?因为我的模块有多次调用这个函数,但是升级到PHP 5.3. 我跟踪了代码,它似乎没有调用这个函数。

我应该改变它吗?

编辑:

一些代码削减:

function complete($message, $endpoint, $return_to)
{
    $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode',
                             '<no mode set>');

    $mode_methods = array(
                          'cancel' => '_complete_cancel',
                          'error' => '_complete_error',
                          'setup_needed' => '_complete_setup_needed',
                          'id_res' => '_complete_id_res',
                          );
    $method = Auth_OpenID::arrayGet($mode_methods, $mode,
                                    '_completeInvalid');
    $method = '_complete_id_res';
    return call_user_func_array(array(&$this, $method),
                                array($message, $endpoint, $return_to));
}

/**
 * @access private
 */
function _complete_id_res($message, &$endpoint, $return_to)
{  
    $user_setup_url = $message->getArg(Auth_OpenID_OPENID1_NS,
                                       'user_setup_url');

    if ($this->_checkSetupNeeded($message)) {
        return new Auth_OpenID_SetupNeededResponse(
            $endpoint, $user_setup_url);
    } else {
        return $this->_doIdRes($message, $endpoint, $return_to);
    }
}

如果我把 die('*'); 第二个函数中的命令,它不会死,表明它没有进入它。

4

4 回答 4

1

为什么不在php.net上检查呢?

变更日志

Version  Description
5.3.0    The interpretation of object oriented keywords like parent and self has
         changed.   Previously, calling them using the double colon syntax would emit an 
         E_STRICT warning because they were interpreted as static.
于 2012-11-04T07:41:13.067 回答
0

现在解决了。问题是函数参数由函数中的引用 (&) 定义,但通过值传递。我&从他们那里删除了,问题就解决了。

于 2012-11-04T09:34:42.580 回答
0

是的,它已经改变了。

5.3.0:对parent、self等面向对象关键字的解释发生了变化。以前,使用双冒号语法调用它们会发出E_STRICT警告,因为它们被解释为静态。

于 2012-11-04T07:41:22.003 回答
0

现在问题已经解决了。这是因为使用 reference(&) 定义函数参数,但调用是带有值的。我从函数定义中删除了“&”,它运行良好。

于 2012-11-04T09:25:15.720 回答