PHP5を試してみる - コンストラクタの名称の統一
サンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。
PHPマニュアルにも「先頭が__(アンダースコア2つ)で始まる関数名は予約されている」とありますが、PHP5からはコンストラクタ名に「__construct」が使えます。こうすることで、大きなクラス階層の場合でのクラス名変更が簡単になります。
で、どうしても「__construct」にしなきゃいけないかと言うとそうでもないようで、互換性のために「__construct」がない場合、従来の方法でコンストラクタを探すようです。まあ、これがないと、PHP5への移行は大変になるでしょうね。。。
また、RC2からは従来の記法と「__construct」の優先順位が、常に「__construct」を優先するよう変更されました。以下のサンプルの実行結果を見ていただくと、すぐにお分かりと思います。
また、従来の記法と「__construct」が存在し、かつ、エラーレベルにE_STRICTが含まれる場合、「Redefining already defined constructor for class ...」といったメッセージが表示されます。
●12.unified_construnctors.php5
<pre>
<?php
class BaseClass {
function __construct()
{
print "In BaseClass constructor (new style)\n";
}
function BaseClass()
{
print "In BaseClass constructor (old style)\n";
}
}
class SubClass extends BaseClass {
function __construct()
{
parent::__construct();
print "In SubClass constructor (new style)\n";
}
function SubClass()
{
parent::__construct();
print "In SubClass constructor (old style)\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
</pre>
<hr>
<?php
show_source("./unified_construnctors.php");
?>
|