php finalを使用して継承を禁止する
phpで修飾子finalを使って、継承を禁止する手順を記述してます。
環境
- OS CentOS Linux release 8.1.1911 (Core)
- PHP 7.4.5
※CentOs8 php7.4をインストールする手順はこちら
継承禁止
まずは、finalを使用せずに継承してみます。
<?php
class test
{
function func1()
{
echo "hello world";
}
}
class childtest extends test
{
function func2()
{
$this->func1();
}
}
$obj = new childtest;
$obj->func2();
実行結果
継承できることが、確認できます。
それでは、finalをつけて継承を禁止してみます。
<?php
final class test
{
function func1()
{
echo "hello world";
}
}
class childtest extends test
{
function func2()
{
$this->func1();
}
}
$obj = new childtest;
$obj->func2();
継承できずにエラーになることが確認できます。
PHP Fatal error: Class childtest may not inherit from final class (test)
オーバーライド禁止
finalはオーバーライドも禁止することができます。
まずは、finalを使用せずに、オーバーライドした実行結果を表示します。
<?php
class test
{
function func1()
{
echo "hello world";
}
}
class childtest extends test
{
function func1()
{
echo "オーバーライド";
}
}
$obj = new childtest;
$obj->func1();
実行結果
finalを使ってオーバーライドを禁止します。
<?php
class test
{
final function func1()
{
echo "hello world";
}
}
class childtest extends test
{
function func1()
{
echo "オーバーライド";
}
}
$obj = new childtest;
$obj->func1();
実行エラーとなります。
PHP Fatal error: Cannot override final method test::func1()
-
前の記事
Vue3環境をwindowsに構築する 2020.11.22
-
次の記事
javascript ページ最下部までスクロールさせる 2020.11.23
コメントを書く