当我尝试在C
命名空间中创建B
和global
时,它确实正常运行。当我将B::create_unit()
转换为C::create_unit()
- >的正文时它变得破碎,不会起作用。任何人都可以提供一些有关这可能是什么的见解吗?
Class A {
protected static $_instance;
public $methods = array();
public function __call($name, $args) {
$obj = $this->methods[$name]['obj'];
$method_name = $this->methods[$name]['method_name'];
call_user_func_array(array($obj, $method_name), $args);
}
public static function add_method($name, $obj, $method_name) {
$unit = static::get_unit();
print_r($unit); // OMG, IT PRINTS (OBJECT B)!!!
$unit->methods[$name]['obj'] = $obj;
$unit->methods[$name]['method_name'] = $method_name;
}
public static function create_unit() {
return static::$_instance = new static();
}
public static function get_unit() {
return static::$_instance;
}
}
Class B extends A {
public static function create_unit() {
return static::$_instance = new static();
}
public function log($msg) {
echo $msg;
}
}
Class C extends A {
public static function create_unit() {
$obj = static::$_instance = new static();
$b = B::create_unit();
C::add_method('foo', $b, 'log');
$obj->foo('message');
return $obj;
}
}
C::create_unit();
答案 0 :(得分:0)
self
指的是实际编写new关键字的同一个类。
static
,在PHP 5.3的后期静态绑定中,指的是您调用方法的层次结构中的任何类。
尝试使用self
代替
self::get_unit();