ホームページ > バックエンド開発 > PHPの問題 > PHPメソッドの書き換えとはどういう意味ですか?

PHPメソッドの書き換えとはどういう意味ですか?

藏色散人
リリース: 2023-03-07 19:26:02
オリジナル
2639 人が閲覧しました

phpメソッドの書き換えとは、親クラスから継承したメソッドをオーバーライドすること、つまり親クラスのメソッドをオーバーライドすることを指します。その方法は次のとおりです:最初にコンストラクタパラメータを定義し、次に「extends」を使用するサブクラスを定義します。継承するキーワード、最後に親クラスのメソッドをオーバーライドします。

PHPメソッドの書き換えとはどういう意味ですか?

推奨: 「PHP ビデオ チュートリアル

  • この方法はどのブランドにも適していますコンピューター

PHP オブジェクト指向プログラミング (OOP) メソッド オーバーライド操作の例

この記事では、PHP でのメソッド オーバーライド操作を例を挙げて説明します。オブジェクト指向プログラミング (OOP)。参考までに皆さんと共有してください。詳細は次のとおりです。

PHP は弱い型指定言語であるため、メソッド自体のパラメーターでさまざまな型のデータを受け取ることができ、また PHP メソッドはさまざまな型のデータを受け取ることができます。パラメータの数は不定であるため、異なる数のパラメータを渡して異なるメソッド名で異なるメソッドを呼び出すことは無効であるため、PHP をオーバーロードすることはできません。

PHP では同名のメソッドを定義することはできませんが、親子関係のある 2 つのクラスでは、サブクラスに親クラスと同じ名前のメソッドを定義することで、メソッドを継承することができます。メソッドは上書きされます (親クラスのメソッドをオーバーライドします)。

<?php
class Person
{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄
//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//这个人可以说话的方法, 说出自己的属性
function say() {
echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
}
}
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
?>
ログイン後にコピー

また、サブクラスが親クラスのメソッドをオーバーライドする場合には、サブクラス内のメソッドのアクセス権が、オーバーライドされるメソッドのアクセス権より低くてはいけないことにも注意する必要があります。つまり、親クラスのメソッドのアクセス許可以上である必要があります。

たとえば、親クラス メソッドのアクセス権限が保護されている場合、サブクラスでオーバーライドされる権限は保護され、パブリックである必要があります。親クラス メソッドがパブリックの場合、オーバーライドされるメソッドはサブクラス内のメソッドは Public のみにすることができます。つまり、サブクラス内のメソッドは常に親クラスのオーバーライドされたメソッド以上のアクセス権を持ちます。

上記の例では、親クラスから継承した「say()」メソッドを「Student」サブクラスに上書きすることで「メソッド」の拡張を実現しています。ただし、このようにすることで上記の問題は解決しますが、実際の開発では、メソッドが 1 つのコードだけであることはできませんし、複数のコードがあることもありません。たとえば、「person」クラスの「say()」メソッドには 100 行のコードがあります。このメソッドを上書きして、元の機能ともう少し機能を保持したい場合は、元の 100 行のコードと、拡張された数行のコードを書き直す必要があります。これは非常に良いことです。場合によっては、親クラスからは元のコードが見えないのですが、この時どうやって元のコードを書き換えるのでしょうか?解決策もあります。サブクラス メソッドで、親クラスでオーバーライドされたメソッドを呼び出すことができます。つまり、オーバーライドされたメソッドの元の関数を取得し、独自の関数の一部を追加することができます。方法は 2 つあります。 . 親クラスのオーバーライドされたメソッドを呼び出すメソッドをサブクラスのメソッドに実装します:

1 つは、親クラスの「クラス名::」を使用して、親クラスのオーバーライドされたメソッドを呼び出す方法です。 ;

1 つは、「parent::」メソッドを使用して親クラスのオーバーライドされたメソッドを呼び出す方法です;

//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();
//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
ログイン後にコピー

これで、2 つの方法で親クラスのオーバーライドされたメソッドにアクセスできるようになります。どちらを選択しますか? 最善の方法は何ですか?ユーザーは、自分が作成したコードが親クラスの変数や関数にアクセスしていることに気づく場合があります。これは、サブクラスが非常に洗練されている場合、または親クラスが非常に特殊化されている場合に特に当てはまります。コード内では親クラスのリテラル名を使用せず、代わりに、extends 宣言内のサブクラスが指す親クラスの名前を参照する特別な名前parentを使用してください。こうすることで、親クラスの名前を複数の場所で使用することがなくなります。実装中に継承ツリーを変更する必要がある場合は、クラス内の extends 宣言を変更するだけです。

以上がPHPメソッドの書き換えとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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