<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'en',
  ),
  'this' => 
  array (
    0 => 'language.oop5.changelog.php',
    1 => 'OOP Changelog',
    2 => 'OOP Changelog',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Classes and Objects',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.lazy-objects.php',
    1 => 'Lazy Objects',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'language/oop5/changelog.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.changelog" class="sect1">
 <h2 class="title">OOP Changelog</h2>
 <p class="para">
  Changes to the PHP OOP model are logged here. Descriptions and other notes regarding
  these features are documented within the OOP model documentation.
 </p>
 <p class="para">
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Version</th>
      <th>Description</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.4.0</td>
      <td>
       Added: Support for <a href="language.oop5.property-hooks.php" class="link">Property Hooks</a>.
      </td>
     </tr>

     <tr>
      <td>8.4.0</td>
      <td>
       Added: Support for <a href="language.oop5.lazy-objects.php" class="link">Lazy Objects</a>.
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       Added: Support for the <span class="modifier">final</span> modifier for class constants. Also, interface constants become overridable by default.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       Added: Support for the <a href="language.oop5.basic.php#language.oop5.basic.nullsafe" class="link">nullsafe operator</a> <em>?-&gt;</em> to access properties and methods on objects that may be null.
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       Changed: It is now possible to throw exception within
       <span class="function"><strong>__toString()</strong></span>.
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       Added: Support for limited return type covariance and argument
       type contravariance. Full variance support is only available if
       autoloading is used. Inside a single file only non-cyclic type
       references are possible.
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       Added: It is now possible to type class properties.
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       Incompatibility: Argument unpacking of
       <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>s with non-<span class="type"><a href="language.types.integer.php" class="type int">int</a></span> keys is no longer
       supported. This behaviour was not intended and thus has been removed.
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       Incompatibility: In previous versions it was possible to separate the
       static properties by assigning a reference. This has been removed.
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       Changed: The <a href="language.operators.type.php" class="link">instanceof</a>
       operator now allows literals as the first operand, in which case the
       result is always <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Deprecated: The <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> method has been
       deprecated in favour of <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span>.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Changed: The following name cannot be used to name classes, interfaces,
       or traits: <code class="literal">object</code>.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Changed: A trailing comma can now be added to the group-use syntax
       for namespaces.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Changed: Parameter type widening. Parameter types from overridden
       methods and from interface implementations may now be omitted.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Changed: Abstract methods can now be overridden when an abstract class
       extends another abstract class.
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       Changed: The following names cannot be used to name classes, interfaces,
       or traits: <code class="literal">void</code> and <code class="literal">iterable</code>.
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       Added: It is now possible to specify the
       <a href="language.oop5.visibility.php#language.oop5.visiblity-constants" class="link">visibility of
        class constants</a>.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Deprecated: <a href="language.oop5.static.php" class="link">Static</a> calls
       to methods that are not declared static.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Deprecated: PHP 4 style <a href="language.oop5.decon.php" class="link">
       constructor</a>. I.e. methods that have the same name as the class
       they are defined in.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Added: Group <em>use</em> declaration: classes, functions
       and constants being imported from the same namespace can now be grouped
       together in a single use statement.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Added: Support for
       <a href="language.oop5.anonymous.php" class="link">anonymous classes</a>
       has been added via <code class="literal">new class</code>.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Incompatibility: Iterating over a non-<span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>
       <span class="type"><a href="language.types.object.php" class="type object">object</a></span> will now have the same behaviour as iterating over by-reference
       <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s.
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       Changed: Defining (compatible) properties in two used
       <a href="language.oop5.traits.php" class="link">traits</a> no longer
       triggers an error.
      </td>
     </tr>

     <tr>
      <td>5.6.0</td>
      <td>
       Added: The <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a> method.
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       Added: The <a href="language.oop5.basic.php#language.oop5.basic.class.class" class="link">::class</a> magic constant.
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       Added: <a href="language.exceptions.php" class="link">finally</a> to handle exceptions.
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       Added: <a href="language.oop5.traits.php" class="link">traits</a>.
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       Changed: If an <a href="language.oop5.abstract.php" class="link">abstract</a> class
       defines a signature for the <a href="language.oop5.decon.php" class="link">
       constructor</a> it will now be enforced.
      </td>
     </tr>

     <tr>
      <td>5.3.3</td>
      <td>
       Changed: Methods with the same name as the last element of
       a <a href="language.namespaces.php" class="link">namespaced</a>
       class name will no longer be treated as <a href="language.oop5.decon.php" class="link">constructor</a>. This change doesn&#039;t
       affect non-namespaced classes.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Changed: Classes that implement interfaces with methods that have default 
       values in the prototype are no longer required to match the interface&#039;s default 
       value.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Changed: It&#039;s now possible to reference the class using a variable (e.g.,
       <code class="literal">echo $classname::constant;</code>).
       The variable&#039;s value can not be a keyword (e.g., <code class="literal">self</code>,
       <code class="literal">parent</code> or <code class="literal">static</code>).
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Changed: An <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> level error is issued if
       the magic <a href="language.oop5.overloading.php" class="link">overloading</a>
       methods are declared <a href="language.oop5.static.php" class="link">static</a>.
       It also enforces the public visibility requirement.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Changed: Prior to 5.3.0, exceptions thrown in the
       <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> function could not be
       caught in the <a href="language.exceptions.php" class="link">catch</a> block, and
       would result in a fatal error. Exceptions now thrown in the __autoload function
       can be caught in the <a href="language.exceptions.php" class="link">catch</a> block, with
       one provison. If throwing a custom exception, then the custom exception class must
       be available. The __autoload function may be used recursively to autoload the
       custom exception class.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Added: The <a href="language.oop5.overloading.php" class="link">__callStatic</a> method.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Added: <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">heredoc</a>
       and <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">nowdoc</a>
       support for class <em>const</em> and property definitions.
       Note: heredoc values must follow the same rules as double-quoted strings,
       (e.g. no variables within).
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Added: <a href="language.oop5.late-static-bindings.php" class="link">Late Static Bindings</a>.
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       Added: The <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a> method.
      </td>
     </tr>

     <tr>
      <td>5.2.0</td>
      <td>
       Changed: The <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a>
       method was only called when it was directly combined with
       <span class="function"><a href="function.echo.php" class="function">echo</a></span> or <span class="function"><a href="function.print.php" class="function">print</a></span>.
       But now, it is called in any <span class="type"><a href="language.types.string.php" class="type string">string</a></span> context (e.g. in
       <span class="function"><a href="function.printf.php" class="function">printf()</a></span> with <code class="literal">%s</code> modifier) but not
       in other types contexts (e.g. with <code class="literal">%d</code> modifier).
       As of PHP 5.2.0, converting <span class="type"><a href="language.types.object.php" class="type object">object</a></span>s without a
       <a href="language.oop5.magic.php#object.tostring" class="link">__toString</a> method to <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
       emits a <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> level error.
      </td>
     </tr>

     <tr>
      <td>5.1.3</td>
      <td>
       Changed: In previous versions of PHP 5, the use of <code class="literal">var</code>
       was considered deprecated and would issue an <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong>
       level error. It&#039;s no longer deprecated, therefore does not emit the error.
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       Changed: The <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a> static
       method is now called for classes exported by <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span>.
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       Added: The <a href="language.oop5.overloading.php#object.isset" class="link">__isset()</a>
       and <a href="language.oop5.overloading.php#object.unset" class="link">__unset()</a> methods.
      </td>
     </tr>

    </tbody>
   
  </table>

 </p>
</div><?php manual_footer($setup); ?>