PHP 里面::和 -> 的区别所在

看代码:

<?php
class Demo
{
    static function sayHello()
    {
        echo 'this is sayhello function';
    }
    public function sayBye()
    {
        echo 'this is saybye function';
    }
}
echo Demo::sayHello();
echo Demo::sayBye();

上面的程序是没有错误的,直接出现了结果。

<?php
class Demo
{
    static function sayHello()
    {
        echo 'this is sayhello function';
    }
    public function sayBye()
    {
        echo 'this is saybye function';
    }
}
echo Demo->sayHello();
echo Demo->sayBye();

出现了 HTTP 500 的错误。

那是因为:

在类里面的时候,$this->func () 和 self::func () 没什么区别。

在外部的时候,-> 必须是实例化后的对象使用; 而::可以是未实例化的类名直接调用。