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



last updated
2004/10/09

counter hits
since 1999/11/06


PHP5を試してみる - 型情報の指定

memoサンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。

これも個人的にはかなり「イイ」感じです。型情報を持たないPHPで「クラス型情報の指定」が可能になります。PHP5で導入される例外処理でcatchする際に型情報を指定することが出来ますが、それに関連するものと思われます。

メソッドの引数を定義する際、Javaと同様、クラス型を指定することで渡されるべき「型」を制限することが出来ます。

●05.ClassTypeHints.php5

<?php
interface Foo {
    function a(Foo $foo);
}

interface Bar {
    function b(Bar $bar);
}

class FooBar implements Foo, Bar {
    function a(Foo $foo) {
        echo "FooBar::a() called\n";
    }

    function b(Bar $bar) {
        echo "FooBar::b() called\n";
    }
}

class Baz { }

$a = new FooBar;
$b = new FooBar;

echo "<pre>";
$a->a($b);
$a->b($b);
echo "</pre>";

/**
 * ヒントとして与えられた型以外を引数とすると、「Fatal error:
 * Argument 1 must implement interface foo in ...」となる
 */
//$a->a(new Baz());
?>
<hr>
<?php
    show_source("./05.ClassTypeHints.php");
?>

PHP4でデザインパターンを試してみたりしていますが、PHP4では型情報を指定することが出来ません(instanceOfメソッドのようなもの作って、型チェックを作り込めば別ですが。。。)。極端な話、メソッド引数として全く異なる(期待しない・されない)クラスを渡すことが出来てしまいますので、利用者側が意識する必要がありましたが、PHP5からはこの辺りがかなり改善されそうです。



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