我认为通常我们使用静态方法,因为我们不需要实例化对象.我们可以className::staticFunction用来调用静态方法,今天发现bub:
<?php
class Foo {
static public function helloWorld() {
print "Hello world " ;
}
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)
<?php
class Foo {
public function helloWorld() {
print "Hello world " ;
}
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)
题:
以上两个脚本都有效.我们没有声明函数static,我们仍然可以className::staticFunction用来调用函数.为什么我们需要使用静态方法?
我们没有将函数声明为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).
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |