ホームページ  >  記事  >  バックエンド開発  >  PHPで親クラスのメソッドを継承する方法

PHPで親クラスのメソッドを継承する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-10-07 14:40:523379ブラウズ

php は親クラスのメソッドを継承します。Student クラスを使用して Person クラスを継承します。コードは [class Student extends Person{private $school;function __construct($name="",$sex="male) "}].

PHPで親クラスのメソッドを継承する方法

php は親クラスのメソッドを継承します:

同じ名前の関数を定義することはできませんPHP(同名変更できない関数を含む) クラス内に同名のメソッドが定義されているため、メソッドのオーバーロードがない サブクラスのみに親クラスと同名のメソッドを定義できる親クラスのメソッドがサブクラスにすでに存在しているため、サブクラスでは親クラスから継承されたメソッドをオーバーライドできます。

サブクラスで親クラスをオーバーライドする方法は、継承されたメソッドをオーバーライドすることです。サブクラスの親クラスからメソッドをオーバーライドします。親クラスのメソッドはサブクラスによってオーバーライドされます。継承した場合は直接使用できませんか?なぜオーバーロードする必要があるのでしょうか?カバーしなければならない状況がいくつかあるためです。たとえば、鳥の一般メソッド「fly」が定義されている「bird」クラスがあり、そのサブクラスとして「ostrich」クラスが「fly」メソッドを継承しますが、「fly」メソッドが継承されるとすぐに、 「ダチョウ」クラスを呼び出すと、ダチョウは飛んでいきます。ダチョウは飛べませんが、他の特性は「鳥」の特性を持っているため、「ダチョウ」クラスを宣言した場合でも「鳥」クラスを継承できますが、 「bird」クラスから継承した「flying」を「ostrich」クラスに追加する必要があります。「メソッドの書き換えには、サブクラスの親クラスのメソッドをオーバーロードする必要があります。

次の例には、"宣言された Person クラスの「speak」メソッド。Student クラスが Person クラスを継承した後、「speak」メソッドを直接使用できます。ただし、person クラスの「speak」メソッドは独自のメンバー属性のみを話すことができ、Student クラスはそのメンバ属性のみを話すことができます。クラスは Person クラスを拡張し、いくつかの新しいメンバー属性を追加します。コードは次のとおりです:

<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function __construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话方法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age."。<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造方法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function __construct($name="",$sex="男",$age=1,$school=""){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称
function say(){
echo "我的名字:".$this ->name.",性别:".$this ->sex.",年龄:".$this ->age.",在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话方法
?>

変更したプログラムを実行した後の出力結果は次のとおりです:

我的名字叫:张三,性别:男,我的年龄是:20,在..学校上学

PHP では、次の関数が提供されます。サブクラスのオーバーロードされたメソッドで親クラスのオーバーライドされたメソッドを呼び出すことで、サブクラスによってオーバーライドされたメソッドで、親クラスから継承およびオーバーライドされたメソッドを引き続き使用し、いくつかの新しい関数を次のように追加できます。呼び出し形式は、サブクラスのオーバーロードメソッドで「parent:メソッド名」を使用します 親クラスでオーバーライドされたメソッドを呼び出します 上記例のコードを変更し、コンストラクターで「parent::__construct()」を使用しますサブクラスによってオーバーライドされ、親クラスでオーバーライドされたコンストラクターを呼び出し、サブクラスで新しく拡張されたメンバー属性を初期化するコードを 1 つ追加します。呼び出すには、サブクラスでオーバーライドされた Say() メソッドの「parent::say()」を使用します。親クラスでオーバーライドされたsay() メソッドを追加し、サブクラスのメンバー属性の関数の出力を追加します。

コードは次のとおりです:

<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function __construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话方法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age."。<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造方法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function __construct($name="",$sex="男",$age=1,$school=""){
//调用父类中被覆盖的构造方法,为从父类中集成过来额出行赋初值
parent::__construct($name,$sex,$age);
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称
function say(){
parent::say(); //调用父类中被本方法覆盖掉的方法
echo "在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话方法
?>

上記の例の出力結果は次のとおりです。前の例と同じですが、この場合はサブクラスに直接渡されます。親クラスでオーバーライドされたメソッドを呼び出す方がはるかに簡単です。また、サブクラスが親クラスのメソッドをオーバーライドする場合、サブクラスでオーバーライドされるメソッドのアクセス権限が、親クラスのオーバーライドされるメソッドのアクセス権限よりも低くてはいけないことに注意する必要があります。たとえば、親クラスのアクセス権限が保護されている場合、子クラスでオーバーライドされるメソッドの権限は保護またはパブリックにする必要があります。

関連する無料学習の推奨事項: php プログラミング (ビデオ)

以上がPHPで親クラスのメソッドを継承する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。