Just a personal note really. I always confuse the two. For the record, in most cases, you’d want to take advantage of late static bindings from PHP 5.3, use static:: over self::, unless you’re really sure you want the class it was actually written in, in which case, use self.
<?php class A { public static $name = 'a'; public static function getSelfName() { return self::$name; } public static function getStaticName() { return static::$name; } } class B extends A { public static $name = 'b'; } var_dump ( A::getSelfName() ); // 'a' var_dump ( A::getStaticName() ); // 'a' var_dump ( B::getSelfName() ); // 'a' var_dump ( B::getStaticName() ); // 'b'