title: Why does PHP allow abstract static functions
body: <p>Consider the following code:</p>
  
  <pre><code>abstract class ExampleClass
  {
      public static function regularStaticFunction()
      {
          return static::abstractStaticFunction();
      }
  
      abstract protected static function abstractStaticFunction();
  }
  
  ExampleClass::regularStaticFunction();
  </code></pre>
  
  <p>The PhpStorm IDE puts a warning on the declaration of <code>abstractStaticFunction</code> that reads:</p>
  
  <blockquote>
    <p>PHP Strict Standards: Static function 'abstractStaticFunction' should not be abstract.</p>
    
    <p>Static function should not be abstract.</p>
  </blockquote>
  
  <p>However, PHP continues program execution when parsing this class and outputs the following:</p>
  
  <blockquote>
    <p>PHP Strict standards:  Static function ExampleClass::abstractStaticFunction() should not be abstract in php shell code on line 7</p>
  </blockquote>
  
  <p>It seems to me that because PHP allows static function calls on abstract classes, defining an abstract static function on an abstract class should not be possible.</p>
  
  <p>Why are abstract static functions allowed in PHP by the interpreter, when they are nonsensical?</p>