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を試してみる - final修飾子

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

PHP5からprivate・abstractなどいろいろな修飾子が導入されますが、そのうちの1つ、finalです。

イメージ的にはJavaと同様のようで、メソッドの場合、サブクラスでオーバーライドすることは出来なくなります。

●06.Final.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";
    }

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

class Baz extends FooBar {
    function a(Foo $foo) {
        echo "Baz::a() called\n";
    }

    /**
     * 「Fatal error: Cannot override final method foobar::b() in ...」と
     * なる
     */
//    function b(Bar $bar) {
//        echo "Baz::b() called\n";
//    }
}

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

echo "<pre>";
$a->a($b);
$a->b($b);
echo "</pre>";
?>
<hr>
<?php
    show_source($_SERVER["SCRIPT_FILENAME"]);
?>

PHP本家のサンプルではメソッドの例しかありませんが、クラスに対しても使えるようで、この場合継承すら出来なくなります。まあ、そのための修飾子なので。。。

●06.FinalClass.php5

<?php
final class MyClass {}

/**
 * finalクラスは継承できない
 * アンコメントすると「Fatal error: Class myclass2 may not inherit
 *  from final class (myclass) in ...」となる
 */
//class MyClass2 extends MyClass {}
?>
<hr>
<?php
    show_source($_SERVER["SCRIPT_FILENAME"]);
?>



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