継承を実装するにはどうすればよいですか?
サブクラスに extends キーワードを使用して、サブクラスが親クラスを継承できるようにします。① サブクラスは親クラスの非プライベートプロパティのみを継承できます。
②サブクラスが親クラスを継承した後は、親クラスのプロパティやメソッドをサブクラスにコピーするのと同じになり、$thisを使って直接呼び出すことができます。
③ PHP は単一継承のみをサポートし、1 つのクラスが複数のクラスを継承することをサポートしません。ただし、クラスは複数レベルの継承を実行します。//Student クラス Chengnian クラスと Person クラスの両方の属性とメソッドを持ちます
3. メソッドのオーバーライド (メソッドの書き換え)
条件① サブクラスが親クラスを継承する。
条件② サブクラスが親クラスの既存メソッドをオーバーライドする。上記2つの条件を満たす
をメソッドカバレッジと呼びます。オーバーライド後、サブクラスがメソッドを呼び出すと、サブクラス独自のメソッドが呼び出されます。
同様に、メソッドのオーバーライドに加えて、サブクラスは属性のオーバーライドのために親クラスと同じ名前の属性を持つこともできます。
4. サブクラスが親クラスのメソッドをオーバーライドする場合、サブクラス内で同じ名前の親クラスのメソッドを呼び出すにはどうすればよいですか? : PARTENT :: メソッド名 ();
したがって、サブクラスが親クラスを継承する場合、サブクラス構造の最初のステップを最初に呼び出す必要があります。
function __construct($name,$sex,$school){
parent::__construct($name,$sex);
$this->school = $school;
}
实例一枚:
class Person{protected $name;public $sex; function __construct($name,$sex){ //声明构造函数 $this->name = $name; $this->sex = $sex; } function say(){ echo "我叫{$this->name},我是{$this->sex}生!<br>"; } } class Student extends Person{ //子类继承父类public $school; function __construct($name,$sex,$school){ //子类的构造函数 parent::__construct($name,$sex); //调用父类构造进行复制$this->school = $school; } function program(){ echo "PHP真好玩!我爱PHP!PHP是世界上最好用的编程语言!<br>"; } function say(){ parent::say(); //重写父类的同名方法echo "我是{$this->school}的"; } } $zhangsan = new Student("张三","男","起航"); $zhangsan->say(); $zhangsan->program();
二、封装
class Person{public $name;public $age;public $sex; function __construct($name, $age,$sex){ $this->name=$name; $this->setAge($age); $this->setSex($sex); } function setAge($age){if($age>=0&&$age<=120){return $this->age=$age; }else{ die("年龄输入有误!!!"); } } function setSex($sex){if($sex=="女"||$sex=="男"){return $this->sex=$sex; }else{ die("性别输入有误!!!"); } } function say(){ echo "我的名字叫{$this->name},我的年龄{$this->age},我的性别是{$this->sex}<br>"; } }class Work extends Person{private $position; function __construct($name, $age,$sex,$position){ parent::__construct($name, $age,$sex); $this->job=$job; $this->setPosition($position); } function setPosition($position){ $arr=['总监','董事长','程序员','清洁工'];if(in_array($position, $arr)){return $this->position=$position; }else{ die("不存在该职位"); } } function __set($key,$value){if($key=="age"){return parent::setAge($value); } elseif($key=="sex"){return parent::setSex($value); } elseif($key=="position"){return $this->setPosition($value); }return $this->$key=$value; } function say(){ parent::say(); echo "我的职位是{$this->position}"; } } $zhangsan=new Work("张三",22,"男","总监"); $zhangsan->setSex("女"); $zhangsan->setAge(30);// $zhangsan->setPosition("董事长");$zhangsan->position="董事长"; $zhangsan->name="lisi";$zhangsan->say();
/*墨盒接口 * 纸张接口*/ interface InkBox{ function color(); }interface Paper{ function sizes(); }class Computer{function fangfa(InkBox $a,Paper $b){ //父类引用echo "即将开始打印····<br>"; $a->color();$b->sizes();echo "打印结束···<br>"; } }class Color implements InkBox{function color(){echo "正在装载彩色墨盒<br>";echo "实现彩色墨盒<br>"; } }class White implements InkBox{function color(){echo "正在装载黑白墨盒<br>"; echo "实现黑白墨盒<br>"; } }class A4 implements Paper{function sizes(){echo "正在加载A4纸张<br>";echo "实现A4纸张<br>"; } }class A5 implements Paper{function sizes(){echo "实现A5纸张<br>"; } }$com=new Computer();//创建对象$com->fangfa(new Color(),new A4());//子类对象
以上がPHP オブジェクト指向の 3 つの主要な特徴を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。