何时需要使用静态方法?

use*_*818 4 php

我认为通常我们使用静态方法,因为我们不需要实例化对象.我们可以className::staticFunction用来调用静态方法,今天发现bub:

test1.php

<?php
class Foo { 
    static public function helloWorld() {
        print "Hello world " ;
    }
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)

test2.php

<?php
class Foo { 
    public function helloWorld() {
        print "Hello world " ;
    }
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)

题:

以上两个脚本都有效.我们没有声明函数static,我们仍然可以className::staticFunction用来调用函数.为什么我们需要使用静态方法?

Ja͢*_*͢ck 5

我们没有将函数声明为static,我们仍然可以使用 className::staticFunction

您可能没有注意到的是PHP抱怨第二种类型的调用:

PHP严格标准:Foo::helloWorld()不应在第1行的php shell代码中静态调用非静态方法

严格标准:Foo::helloWorld()不应在第1行的php shell代码中静态调用非静态方法

为了使这些声明可见你需要设置的值error_reporting-1,无论是使用ini_set()或通过php.ini配置文件; 顺便说一句,在开发过程中建议这样做.

结论

静态调用的函数应声明为static function xyz().

更新

顺便说一下,使用范围解析运算符::并不一定意味着你正在进行静态调用; 考虑这个例子:

class Foo 
{ 
    public function helloWorld() 
    {
        print "Hello world ";
    }

    public function doSomething()
    {
        self::helloWorld();
    }
}

$f = new Foo;
$f->doSomething();
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为使用self::Foo::不是更改调用"模式"(除非您调用的方法被定义为static).