PHP 中的静态和非静态调用


Static and Non-Static Calling in PHP

好的,我有这个代码,我正在学习

 class scope{
    function printme(){
        return "hello";
    }
    public static function printme(){
        return "hello"; 
    }
 }
$s = new scope();
echo $s->printme(); //non-static call
echo "<br>";
echo scope::printme(); //static call

现在,这不是我项目的代码,但这些是我想做的事情

  1. 我想创建一个包含静态和非静态函数的类。
  2. 我希望一个函数在静态和非静态调用中都可用。

由于非静态函数上有很多操作,我还需要将其作为静态函数调用,这样我就不需要实例化类了。这可能吗?或者我真的需要将函数重写为另一个函数或类?

注意:告诉我我是否已经在做一些糟糕的编程。

规则如下:

静态方法既可用于静态方法

,也可以用于非静态方法。

非静态方法

只能在非静态方法中使用。

如果很少需要类的实例,可以让静态方法创建一个实例,调用非静态方法并返回值。

class Scope {
    public function mynonstatic() {
    }
    public static function mystatic() {
        $s = new Scope();
        return $s->mynonstatic();
    }
}

请记住,静态方法实际上只是一个范围缩小的全局函数。 它们是有用的,但不应在没有充分理由的情况下创建。

由于非静态函数有很多操作,我还需要 将其调用为静态函数,这样我就不需要实例化 类。这可能吗?或者我真的需要重写 函数到另一个函数或类?

如果您需要静态,请将其设置为静态。如果你不需要它,那就保持原样。可以从非静态函数内部调用静态函数。

class Foo
{
    public function bar()
    {
        Foo::zex();
        // or self::zex() or even $this->zex();
    }
    public static function zex()
    {
    }
}

$foo    = new Foo;
$foo->bar();

蚂蚁反过来。

class Foo
{
    public function bar()
    {
    }
    public static function zex()
    {
        $foo    = new Foo;
        $foo->bar();
    }
}
什么时候应该做

,或者应该做是另一个问题。后者最常见的用途可能是单例模式。