全面解析PHP面向对象的三大特征
副问题[/!--empirenews.page--]
PHP面向工具的三大特性: 担任,封装,多态 一.担任1、怎样实现担任? 给子类行使extends要害字,让子类担任父类; class Student extends Person{} 2、实现担任的留意事项? ① 子类只能担任父类的非私有属性。 ②子类担任父类后,相等于将父类的属性和要领copy到子类,可以直接行使$this挪用。 ③ PHP只能单担任,不支持一个类担任多个类。可是一个类举办多层担任; class Chengnian extends Person{}
class Student extends Chengnian{}
//Student类就同时具有了Chengnian类和Person类的属性和要领 3、要领包围(要领重写) 前提① 子类担任父类。 前提② 子类重写父类已有要领。 切合上述两个前提,称为要领包围。包围之后,子类挪用要领,将挪用子类本身的要领。 同样,除了要领包围,子类也可以具有与父类同名的属性,举办属性包围。 4、假如,子类重写了父类要领,如安在子类中挪用父类同名要领? partent::要领名(); 以是,当子类担任父类时,需在子类的结构中的第一步,起首挪用父类结构举办复制。 parent::__construct($name,$sex);
$this->school = $school;
} 实例一枚:school = $school; }function program(){ function say(){ $zhangsan = new Student("张三","男","起航"); 二、封装1、什么是封装? 通过会见修饰符,将类中不必要外部会见的属性和要领举办私有化处理赏罚,以实现会见节制。 【留意】:是实现会见节制,而不是拒绝会见。 也就是说,我们私有化属性之后,必要提供对应的要领,让用户通过我们提供的要领处理赏罚属性。 2、封装的浸染? ①行使者只体谅类可以或许提供的成果,而不必体谅成果实现的细节!(封装要领) ②对用户的数据举办节制,防备配置不正当数据,节制返回给用户的数据(属性封装+set/get要领) 3、实现封装操纵? ① 要领的封装 对付一些只在类内部行使的要领,而不像对外部提供行使。那么,这样的要领我们可以行使private举办私有化处理赏罚。 private function formatName(){} //这个要领仅仅能在类内部行使$this挪用 function showName(){ $this -> formatName(); } ②属性的封装+set/get要领 为了节制属性的配置以及读取,可以将属性举办私有化处理赏罚,并要求用户通过我们提供的set/get要领举办配置 private $age; function setAge($age){ $this->age = $age; } function getAge(){ return $this->age; } $工具 -> getAge(); $工具 -> setAge(12); ③ 属性的封装+把戏要领 private $age; function __get($key){ return $this->$key; } function __set($key,$value){ $this->$key=$value; } $工具->age; // 会见工具私有属性时,自动挪用__get()把戏要领,而且将会见的属性名传给__get()要领; $工具->age=12; // 配置工具私有属性时,自动挪用__set()把戏要领,而且将配置的属性名以及属性值传给__set()要领; 【 留意】:在把戏要领中,可以行使分支布局,判定$key的差异,举办差异操纵。 4、关于封装的把戏要领: ① __set($key,$value):给类私有属性赋值时自动挪用,挪用时给要领转达两个参数:必要配置的属性名、属性值; ② __get($key):读取类私有属性时自动挪用,挪用时给要领转达一个参数:必要读取的属性名; ③ __isset($key):外部行使isset()函数检测私有属性时,自动挪用。 >>> 类外部行使isset();检测私有属性,默认是检测不到的。false >>> 以是,我们可以行使__isset();函数,在自动挪用时,返回内部检测功效。 $key); }当外部行使isset($工签字->私有属性);检测时,将自动挪用上述__isset()返回的功效! ④ __unset($key):外部行使unset()函数删除私有属性时,自动挪用; $key); }当外部行使unset($工签字->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个把戏要领处理赏罚。 实例一枚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}"; } } class Work extends Person{private $position; function __construct($name,$position){ parent::__construct($name,$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(){ $zhangsan=new Work("张三",22,"总监"); 三.多态3.1、什么是多态? 多态实现多态的条件是实现担任。 1.一个类被多个子类担任,假如这个类的某个要领在多个子类中示意出差异的成果,我们称这种举动为多态。在PHP中的要领重写, 2.实现多态的须要途径:
";
$a->color();
$b->sizes();
echo "打印竣事··· } (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |