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'