С поздней статической привязкой в PHP v5.3 можно с пользой объявить методы static в интерфейсах; с чертами PHP v5.4, методы могут быть либо static, либо abstract, но не оба. Это кажется нелогичным и непоследовательным.
В частности, предположим, что у одного есть интерфейс, для которого признак обеспечивает всю реализацию, за исключением статического метода; если этот признак не указан в этом признаке, статические анализаторы не могут ссылаться на какие-либо ссылки на них в пределах этого признака. Но предоставление конкретной реализации в этом признаке больше не приводит к внедрению/использованию классов для обеспечения их собственной реализации - что опасно; abstract static был бы идеальным, но не разрешен.
Каково объяснение этого противоречия? Как вы порекомендовали бы разрешить эту проблему?
interface MyInterface
{
    public static function getSetting();
    public function doSomethingWithSetting();
}
trait MyTrait
{
    public abstract static function getSetting(); // I want this...
    public function doSomethingWithSetting() {
        $setting = static::getSetting(); // ...so that I can do this
        /* ... */
    }
}
class MyClass implements MyInterface
{
    use MyTrait;
    public static function getSetting() { return /* ... */ }
}
