我在网站上有一些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);
});
我的问题是:为什么版本之间有所不同?并且有人可以了解预期的行为是什么吗?
谢谢!
答案 0 :(得分:0)