我知道PHP中的重载不可用,并且func_get_args有一个解决方法。但我的问题是,如果我想制作相同方法的静态和非静态版本,我该怎么办?例如,我有一个Profiles_Model类。有时我可能只想获取所有配置文件,但仅此而已,所以我不想实例化一个对象,调用静态方法就足够了:
Profiles_Model :: getProfiles();
但有时候我可能有一个来自类的实例化对象而且我使用其他方法,我想如果不仅是类而且对象本身具有相同的方法,如:
$pmodel=new Profiles_Model();
$pmodel->getProfiles();
有什么解决方案吗?这就是我想要的:
class Profiles_Model extends Model{
.
.
.
public function getProfiles(){
// do some stuff
}
public static function getProfiles(){
// do some stuff with the same results
}
}
答案 0 :(得分:1)
可以以对象方式调用静态方法,因此使用静态方法
Profiles_Model::getProfiles();
也将可用
$pmodel=new Profiles_Model();
$pmodel->getProfiles();
但是在方法中你不能访问对象的属性,只能访问静态字段和静态方法。
但你能欺骗的是:
class a
{
public static function __callStatic($name, $arguments)
{
if ($name === 'b')
{
echo "a::b() called";
return true;
}
throw new BadMethodCallException();
}
public function __call($name, $arguments)
{
if ($name === 'b')
{
echo "b() called in object context";
return true;
}
throw new BadMethodCallException();
}
}
示例:强>
$a = new a();
$a->b(); // b() called in object context
a::b(); // a::b() called