Проще объяснить на примере:
class A {
public static function getValSelf()
{
return new self();
}
public static function getValStatic()
{
return new static();
}
}
Class B extends A {
}
var_dump(get_class(B::getValSelf())); // 'A'
var_dump(get_class(B::getValStatic())); // 'B'