【发布时间】:2011-08-17 08:58:47
【问题描述】:
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 不允许像这样重新声明。有什么解决方法吗?
【问题讨论】:
-
是的,有一个解决方法:使用另一个名称。 ;-) PHP 不是 C++,方法的唯一性在于它们的名称,而不是它们的名称/参数/可见性组合。即使这样,您也不能将对象方法重载为 C++ 中的静态方法。
-
任何语言都允许这样做吗?我知道 C# 没有 - stackoverflow.com/questions/160118/…
-
但是用同一个名字做同样的事情是不是很整洁?
-
@Rizky 如果他们做不同的事情就不会
-
@Rizky:不是真的,它只是无缘无故地造成歧义,因为如果两种方法都做同样的事情,你就不需要两者了。只需将构造函数的
$name参数设为可选参数,然后将if放入您的work()方法中即可。
标签: php static instance redeclaration