PHP5 - 通过字符串启动一个类 - 两种不同的方式

As I am learning how PHP OOP works, I stumbled upon the following confusion.

class Foo {

    static function baz() {
        echo 'works';
    }

}

# 1
$a = 'Foo';
$a::baz();

# 2
Foo::baz();

PHP manual states that since 5.3.0, it is possible to reference a static class via a string (http://php.net/manual/en/language.oop5.static.php)

What I don't understand is, what is the different between #1 and #2? Aren't they technically the same since both are calling a static function without initiating a class? Where can #1 be applied in practical scenario?

The difference is in a version. Before PHP5.3 you cannot use static methods with variable.

Also, second one 'hide' using of a class. Your IDE could not find class usage.

Also you could use object to call static methods.

class Foo {
    static function baz() {
        echo 'works';
    }
}

eval(
'$a = "Foo";
$a::baz();');

eval(
'$a = new Foo();
$a::baz();');

eval(
'Foo::baz();');

http://3v4l.org/WOK44