class me {
private $name;
public function __construct($name) { $this->name = $name; }
public function work() {
return "You are working as ". $this->name;
}
public static function work() {
return "You are working anonymously";
}
}
$new = new me();
me::work();
致命错误:无法重新声明我:: work()
问题是,为什么php不允许这样的重新声明.有什么解决方法吗?
解决方法:
尽管我很可能永远不会在生产代码中执行以下操作,但实际上使用魔术方法创建可以解决此问题:
在对象范围内调用不可访问的方法时,内部会触发__call.
在静态范围内调用不可访问的方法时,内部会触发__callStatic.
class Test
{
public function __call($name, $args)
{
echo 'called '.$name.' in object context\n';
}
public static function __callStatic($name, $args)
{
echo 'called '.$name.' in static context\n';
}
}
$o = new Test;
$o->doThis('object');
Test::doThis('static');
?>
标签:instance,static,php,redeclaration
来源: https://codeday.me/bug/20191102/1993200.html