In the context of Late Static Binding, there is a difference.
Consider this code:
<?php class A { const FOO = 1; function bar() { print self::FOO; print "\n"; print static::FOO; } } class B extends A { const FOO = 5; } $b = new B; $b->bar();
If you run this code, the output will be:
1 5
When referring to self::FOO value 1 is output (although bar() is called in class B , but when using the static , later static binding is applied, and it refers to the FOO constant from B , not A when using the static keyword.
This is true for PHP 5.3 and later.
source share