Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2005/05/24

counter hits
since 1999/11/06


PHP5を試してみる - コンストラクタの名称の統一

memoサンプルは、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");
?>



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2005 by Hideyuki SHIMOOKA all rights reserved.