Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的非静态方法是如何像静态方法一样被调用的?_Php_Oop - Fatal编程技术网

PHP中的非静态方法是如何像静态方法一样被调用的?

PHP中的非静态方法是如何像静态方法一样被调用的?,php,oop,Php,Oop,请参阅下面的代码。我在类Foo中定义了一个名为bar的非静态方法。但是我使用Foo::bar()语法调用该方法,就好像它是静态的一样。它可以工作: 为什么我没有得到一个致命的错误,我试图调用一个非静态方法作为静态?你能给我指一下官方的PHP文档,它澄清了这一点吗?这里你不会得到致命的警告,而是一个严格的标准通知 严格标准:不应调用非静态方法Foo::bar() 静态地 始终启用错误报告(-1)在您测试的任何代码上。如果启用了此选项,您可以在输出中看到上述内容 查看文档我认为它将生成警告。可能

请参阅下面的代码。我在类
Foo
中定义了一个名为
bar
的非静态方法。但是我使用
Foo::bar()
语法调用该方法,就好像它是静态的一样。它可以工作:



为什么我没有得到一个致命的错误,我试图调用一个非静态方法作为静态?你能给我指一下官方的PHP文档,它澄清了这一点吗?

这里你不会得到致命的警告,而是一个严格的标准通知

严格标准:不应调用非静态方法Foo::bar() 静态地

始终启用
错误报告(-1)在您测试的任何代码上。如果启用了此选项,您可以在输出中看到上述内容


查看文档

我认为它将生成警告。可能很严格

定义静态方法的主要原因是您不能使用$This对象引用静态函数中的任何其他公共成员

如果您试图在静态函数中使用$this,您将得到一个致命错误:当不在对象上下文中时使用$this

概念是,静态方法是关于应用限制,以及在程序执行期间如何处理限制。

-至于您对缺少致命错误的困惑;PHP是一种脚本语言。
<?php
class Foo
{
    public function bar()
    {
        echo "hello, world\n";
    }
}

Foo::bar();
?>