PHP静态上下文指的是错误的类

时间:2014-10-09 14:00:00

标签: oop ubuntu nginx php


我在网站上有一些PHP代码,我正在尝试移动到不同的服务器(从开发到生产),类似于以下内容:

class test1 {

    static function make () {
        $object = static::maker(function( $params ) {
            return new static($params);
        });
        return $object;
    }

    protected static function maker ( $callable ) {
        $params = [/*...*/];
        return $callable( $params );
    }

}

class test2 extends test1 {

    function sayhi () {
        echo "Hello! from: ".get_called_class();
    }

}

$test = test2::make();
$test->sayhi();

我的开发环境是OSX 10.9运行php 5.5.17和nginx运行php-fpm,我的生产环境是Ubuntu 14.04.1 LTS运行php 5.5.11和nginx运行php-fpm。

在我的开发机器上

我得到了预期的结果:

Hello! from: test2

但在生产服务器上会抛出错误:

PHP message: PHP Fatal error:  Call to undefined method test1::sayhi()

揭示静态上下文指向test1,这是不期望的。 我想出的解决方法是调用这样的函数:

$class = get_called_class();
$object = static::maker(function( $params ) use ( $class ) {
    return new $class($params);
});

我的问题是:为什么版本之间有所不同?并且有人可以了解预期的行为是什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)