PHP5を試してみる - final修飾子
サンプルは、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";
}
}
$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 {}
?>
<hr>
<?php
show_source($_SERVER["SCRIPT_FILENAME"]);
?>
|