<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.oop5.changelog.php',
    1 => '変更履歴',
    2 => '変更履歴',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'クラスとオブジェクト',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.lazy-objects.php',
    1 => 'レイジーオブジェクト',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.php',
    1 => '名前空間',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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">変更履歴</h2>
 <p class="para">
  PHP の OOP モデルの変更履歴をここに記録します。
  個々の機能の説明や注意点については、クラスとオブジェクトに関するドキュメントを参照ください。
 </p>
 <p class="para">
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>バージョン</th>
      <th>説明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.4.0</td>
      <td>
       <a href="language.oop5.property-hooks.php" class="link">プロパティフック</a> がサポートされました。
      </td>
     </tr>

     <tr>
      <td>8.4.0</td>
      <td>
       <a href="language.oop5.lazy-objects.php" class="link">レイジーオブジェクト</a>がサポートされました。
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       追加: クラスの定数に対して、<span class="modifier">final</span> が指定できるようになりました。インターフェイスの定数も、デフォルトでオーバーライドできるようになりました。
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       追加: <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> になる可能性があるオブジェクトのメソッドやプロパティにアクセスする手段として、<a href="language.oop5.basic.php#language.oop5.basic.nullsafe" class="link">nullsafe 演算子</a> <em>?-&gt;</em> をサポートしました。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       変更: <span class="function"><strong>__toString()</strong></span>
       から、例外をスローすることができるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       追加: 戻り値の型を制限する 共変性
       と、引数の型の 反変性 がサポートされました。
       完全な型の変位指定は、オートローディングが使われている場合のみ有効です。
       単一ファイル内では、型の参照が循環参照していない場合のみ可能です。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       追加: クラスのプロパティは、型を宣言できるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       互換性のない変更:
       <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> への引数のアンパックを <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
       でないキーで行うことはサポートされなくなりました。
       このような動作は意図されていなかったので、削除されました。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       互換性のない変更:
       7.3.0 より前のバージョンでは、参照を代入することによって、
       static なプロパティが異なる値になる可能性がありました。
       この振る舞いは削除されました。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       変更:
       <a href="language.operators.type.php" class="link">instanceof</a> 演算子が、
       最初のオペランドにリテラルを受け入れるようになりました。
       この場合、結果は常に FALSE を返します。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       推奨されない変更:
       <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> メソッドは非推奨になりました。
       <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>
       変更: 次の名前は、クラスや trait、
       インターフェイスの名前として使うことが禁止されます:
       <code class="literal">object</code>
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       変更:
       名前空間のグループ指定における最後のカンマが許可されるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       変更:
       パラメータの型の拡大変換が可能になりました。
       オーバーライドされたメソッドや、インターフェイスの実装の
       パラメータの型を省略できるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       変更:
       ある抽象クラスが別の抽象クラスを継承しているときに、 
       継承元クラスの抽象メソッドをオーバーライドできるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       変更:
       以下のキーワードが、
       クラスやインターフェイスやトレイトの名前として使えなくなりました:
       <code class="literal">void</code> と <code class="literal">iterable</code>
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       追加:
       <a href="language.oop5.visibility.php#language.oop5.visiblity-constants" class="link">クラス定数のアクセス範囲</a>
       を指定できるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       推奨されない変更:
       static 宣言されていないメソッドに対する
       <a href="language.oop5.static.php" class="link">static</a> 呼び出しが非推奨となりました。 
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       推奨されない変更:
       PHP 4 形式の
       <a href="language.oop5.decon.php" class="link">コンストラクタ</a>
       は非推奨になりました。
       つまり、クラスと同じ名前のメソッドがクラスに定義されていた場合です。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       追加:
       <em>use</em> 宣言のグループ化:
       複数のクラスや関数そして定数を同じ namespace からインポートする際に、
       単一の use 文にまとめられるようになりました。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       追加:
       <code class="literal">new class</code> 経由での
       <a href="language.oop5.anonymous.php" class="link">無名クラス</a>
       のサポートが追加されました。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       互換性のない変更:
       <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> の反復処理の挙動が、
       <span class="type"><a href="language.types.array.php" class="type array">array</a></span> を参照渡しで反復処理したときと同じようになりました。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       変更:
       (互換性のある) プロパティを2つの
       <a href="language.oop5.traits.php" class="link">traits</a> で使っても
       エラーにならなくなりました。
      </td>
     </tr>

     <tr>
      <td>5.6.0</td>
      <td>
       追加: <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a> メソッド。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       追加: <a href="language.oop5.basic.php#language.oop5.basic.class.class" class="link">::class</a> マジック定数。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       追加: 例外処理に <a href="language.exceptions.php" class="link">finally</a>。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       追加: <a href="language.oop5.traits.php" class="link">トレイト</a> が追加されました。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       変更: <a href="language.oop5.abstract.php" class="link">抽象</a>クラスで<a href="language.oop5.decon.php" class="link">
コンストラクタ</a>のシグネチャを定義している場合は、
       そのシグネチャに従うことが必須となりました。
      </td>
     </tr>

     <tr>
      <td>5.3.3</td>
      <td>
       変更: <a href="language.namespaces.php" class="link">名前空間</a>
       つきのクラス名の最後の部分と同じ名前のメソッドは、<a href="language.oop5.decon.php" class="link">コンストラクタ</a> とはみなされなくなりました。
       名前空間を使っていないクラスは今までと変わりません。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       変更: プロトタイプでデフォルト値を指定したメソッドをもつインターフェイスを
       実装したクラスを作るときに、実装側でのデフォルト値を
       インターフェイスのデフォルト値と一致させなくてもよくなりました。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       変更: 変数を使ってクラスを参照することができるようになりました
       (例: <code class="literal">echo $classname::constant;</code>)。
       この変数の値に、キーワード (<code class="literal">self</code> や
       <code class="literal">parent</code>、<code class="literal">static</code> など) を使うことはできません。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       変更: <a href="language.oop5.overloading.php" class="link">オーバーロード</a> メソッドが
       <a href="language.oop5.static.php" class="link">static</a> 宣言されている場合に
       <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> レベルのエラーが発生するようになりました。
       また、public 宣言することが必須となりました。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       変更: 5.3.0 より前のバージョンでは、
       <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> 関数の中で発生した例外を
       <a href="language.exceptions.php" class="link">catch</a> ブロックで捕捉することができず、
       致命的なエラーとなっていました。このバージョンからは __autoload
       関数内で発生した例外を <a href="language.exceptions.php" class="link">catch</a>
       ブロックで捕捉できるようになりましたが、ひとつ条件があります。
       独自の例外クラスをスローする場合は、その例外クラスが使用可能でなければなりません。
       __autoload 関数は、再帰的に呼び出されて独自の例外クラスを読み込もうとする可能性があります。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       追加: <a href="language.oop5.overloading.php" class="link">__callStatic</a> メソッド。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       追加: <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">ヒアドキュメント</a>
       および <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">Nowdoc</a>
       の、クラス定数やプロパティの定義での使用。
       注意: ヒアドキュメントの値は、ダブルクォートで囲んだ文字列と同じ規則に従わなければなりません
       (その中で変数を使えないなど)。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       追加: <a href="language.oop5.late-static-bindings.php" class="link">遅延静的束縛</a>。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       追加: <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a> メソッド。
      </td>
     </tr>

     <tr>
      <td>5.2.0</td>
      <td>
       変更: <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a>
       メソッドがコールされるのは
       <span class="function"><a href="function.echo.php" class="function">echo</a></span> や <span class="function"><a href="function.print.php" class="function">print</a></span>
       と直接組み合わせて使った場合のみでした。このバージョンからは、任意の
       <span class="type"><a href="language.types.string.php" class="type string">string</a></span> コンテキスト
       (<span class="function"><a href="function.printf.php" class="function">printf()</a></span> で <code class="literal">%s</code> 修飾子を使った場合など)
       でコールされるようになりました。ただし、他の型のコンテキスト
       (<code class="literal">%d</code> 修飾子を使った場合など) は除きます。
       PHP 5.2.0 以降は、<a href="language.oop5.magic.php#object.tostring" class="link">__toString</a>
       メソッドを持たない <span class="type"><a href="language.types.object.php" class="type object">object</a></span> を <span class="type"><a href="language.types.string.php" class="type string">string</a></span> に変換しようとすると
       <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> レベルのエラーが発生します。
      </td>
     </tr>

     <tr>
      <td>5.1.3</td>
      <td>
       変更: PHP 5 の初期のバージョンでは <code class="literal">var</code>
       を使うことが非推奨とされており、<strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> レベルのエラーが発生していました。
       このバージョンからは非推奨ではなくなり、エラーが発生しなくなりました。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       変更: <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a> メソッドが、
       <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> でエクスポートしたクラスに対してもコールされるようになりました。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       追加: <a href="language.oop5.overloading.php#object.isset" class="link">__isset()</a> メソッドおよび
       <a href="language.oop5.overloading.php#object.unset" class="link">__unset()</a> メソッド。
      </td>
     </tr>

    </tbody>
   
  </table>

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