title: static return type in PHP 7 interfaces
body: <p>Why is it not possible in PHP 7, to declare an interface with a <code>static</code> return type?</p>
  
  <p>Let's say I have the following classes:</p>
  
  
  
  <pre class="lang-php prettyprint-override"><code>interface BigNumber {
      /**
       * @param BigNumber $that
       *
       * @return static
       */
      public function plus(BigNumber $that);
  }
  
  class BigInteger implements BigNumber { ... }
  class BigDecimal implements BigNumber { ... }
  </code></pre>
  
  <p>I want to enforce the return type of the <code>plus()</code> method to <code>static</code>, that is:</p>
  
  <ul>
  <li><code>BigInteger::plus()</code> must return a <code>BigInteger</code></li>
  <li><code>BigDecimal::plus()</code> must return a <code>BigDecimal</code></li>
  </ul>
  
  <p>I can declare the interface in the following way:</p>
  
  <pre class="lang-php prettyprint-override"><code>public function plus(BigNumber $that) : BigNumber;
  </code></pre>
  
  <p>But that doesn't enforce the above. What I would like to do is:</p>
  
  <pre class="lang-php prettyprint-override"><code>public function plus(BigNumber $that) : static;
  </code></pre>
  
  <p>But PHP 7, to date, is not happy with it:</p>
  
  <blockquote>
    <p>PHP Parse error:  syntax error, unexpected 'static' (T_STATIC)</p>
  </blockquote>
  
  <p>Is there a specific reason for this, or is this a bug that should be reported?</p>