php - PHP中的静态方法与非静态方法有什么区别吗?

标签 php static public

class t {
    public function tt()
    {
        echo 1;
    }
}
t::tt();

看到了吗?非静态函数也可以在类级别调用。那么如果我在public之前添加一个static关键字有什么不同呢?

最佳答案

除此之外,如果您尝试在您的方法中使用 $this,如下所示:

class t {
    protected $a = 10;
    public function tt() {
        echo $this->a;
        echo 1;
    }
}
t::tt();

静态调用非静态方法时会出现 fatal error :

Fatal error: Using $this when not in object context in ...\temp.php on line 11

即你的例子有点太简单了,与实际情况不符;-)


另请注意,您的示例应该给您一个严格的警告(quoting):

Calling non-static methods statically generates an E_STRICT level warning.

而且它确实做到了(至少,对于 PHP 5.3):

Strict Standards: Non-static method t::tt() should not be called statically in ...\temp.php on line 12
1

所以:不太好 ;-)


不过,静态调用非静态方法看起来不像任何一种好的做法(这可能是它引发严格警告的原因),因为静态方法与非静态方法的含义不同-static :静态方法不引用任何对象,而非静态方法在调用类的实例上工作。


再次重申:即使 PHP 允许您做某事(可能出于历史原因——比如与旧版本的兼容性),这并不意味着您应该这样做!

关于php - PHP中的静态方法与非静态方法有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439036/

相关文章:

java - 静态代码块有什么用?

c++ - 如果返回类型为 static const 时返回非静态本地会发生什么

ruby - Sinatra - 多个公共(public)目录

php - 你如何在 Symfony 4 中使用 RedisSessionHandler?损坏的文档

php - 使用 csv_from_result 在 CSV 导出中返回字符串而不是数据库条目

c - GCC 中静态变量的符号是如何命名的?

java - 学习java,为什么我的私处是private?

struct - 避免使用 Rust 中的 pubs

javascript - 如何在 while 循环中创建 'like' 按钮,以便我可以为每个循环更改他的类名?

从数据库返回图像的PHP代码