PHPのオブジェクト指向の書き換えとオーバーロードとは何ですか?使用するための要件は何ですか?

伊谢尔伦
リリース: 2023-03-13 07:58:02
オリジナル
1607 人が閲覧しました

書き換え:

は、サブクラスが親クラスのいくつかのメソッドを継承し、そのサブクラスが内部で同じメソッドを定義する場合、この新しく定義されたメソッドは親クラスの継承されたメソッドをオーバーライドすることを意味します。クラスはメソッドを呼び出すことしかできません。その中で定義されています。

次の要件があります:

1. 親クラスとサブクラスにまったく同じパラメーターと名前を持つメソッドがある場合、サブクラスのメソッドは親クラスのメソッドをオーバーライドします。

メソッド カバレッジを達成するには、パラメーターに一貫性がある必要があります。パラメーターの数が一致しない場合、エラーが報告されます (これには、前述の メソッドのオーバーロード が含まれます)。メソッド名が一致しない場合、上書きされるのはサブクラスの新しく定義されたメソッドのみです。

2. メソッド カバレッジを実装する場合、アクセス修飾子は異なっていてもかまいませんが、サブクラスのアクセス スコープは親クラスのアクセス スコープ以上である必要があります。

これはおそらくphpのような言語の設計ルールです。私が理解しているのは、より高いレベルにあるものにアクセスする方が簡単であるということです。より低いレベルにあるものにアクセスしたい場合は、より高い権限が必要です。

パラメータと名前が同じである必要があります。サブクラスが親クラスと同じ名前である必要はありません。

では、パラメーターと名前が同じである必要があります。具体的には、パラメーター名ではなく、パラメーターの数が親クラスと同じである必要があります。つまり、渡されるパラメータの名前は、渡される数値が同じであれば任意です。

コードを見てください:

<?php
class  shao
{
    public function sasa($name){
        echo $name,&#39;狗!<br/>&#39;;
    }
}
class zhen extends shao{
    public function aaa()
    {
        echo &#39;猫<br/>&#39;;
    }
}
$lli = new zhen();
$lli->aaa();
$lli->aaa(&#39;binghh&#39;);
?>
ログイン後にコピー
<?php
class fu
{
    public function text(){
        echo &#39;父类&#39;;
    }
    public  function  textt(){
        echo &#39;父亲&#39;;
}
}
class erzi extends fu{
    public function text()
    {
        parent::text();//我要父类的东西
        echo &#39;儿子&#39;;//重写

    }
}
$shili = new fu();
$erzi = new erzi();
$erzi->text();
?>
ログイン後にコピー

オーバーロード:

オーバーロードは、クラスのポリモーフィズムの実装です。 関数オーバーロードとは、1つの識別子が複数の関数名として使用され、同じ名前を持つこれらの関数は関数のパラメーターの数またはパラメーターの型によって区別できるため、呼び出し時に混乱が生じないようにすることを意味します。つまり、呼び出されたとき、メソッド名は同じでも、異なるパラメータに従って対応する関数を自動的に呼び出すことができます。

php を実装するのは簡単ではありません。

クラス内のメソッドに複数の効果を生成させることができ、渡されたさまざまなパラメーターに従ってさまざまなロジックを実行できます。

次の要件があります:

1. オーバーロードを使用する場合、同じメソッド名と異なるパラメーター形式を介してのみ実現できます。パラメーターの型が異なると、パラメーターの型、パラメーターの数、パラメーターの順序も異なります (パラメーターの型は異なる必要があります)。

3 、例外の型、およびスローされる例外を通じてオーバーロードを行うことはできません。メソッドの数はオーバーロードに影響しません。

<?php
class fu
{
    public function text(){
        echo &#39;父类&#39;;
    }
    public  function  textt(){
        echo &#39;父亲&#39;;
    }
}
class erzi extends fu
{

        function test($name)
        {
            //方法重载
            parent::text();//我要父类的东西
            echo "erzi",$name;//重写

        }
    }

$erzi = new fu();
$erzi-> text("123");
?>
ログイン後にコピー

オーバーライドはサブクラスと親クラスにのみ存在し、オーバーロードは 1 つのクラスに存在します。

オーバーライドは書き換えです

オーバーロードはオーバーロードです

以上がPHPのオブジェクト指向の書き換えとオーバーロードとは何ですか?使用するための要件は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート