重载PHP方法

时间:2014-09-09 12:20:46

标签: php overloading

我知道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
    }

}

1 个答案:

答案 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