加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

全面解析PHP面向对象的三大特征

发布时间:2021-01-19 07:28:02 所属栏目:编程 来源:网络整理
导读:PHP面向工具的三大特性: 担任,封装,多态 一.担任 1、怎样实现担任? 给子类行使extends要害字,让子类担任父类; class Student extends Person{} 2、实现担任的留意事项? ① 子类只能担任父类的非私有属性。 ②子类担任父类后,相等于将父类的属性和方
副问题[/!--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(){
echo "PHP真好玩!我爱PHP!PHP是天下上最好用的编程说话!
";
}

function say(){
parent::say(); //重写父类的同名要领
echo "我是{$this->school}的";
}
}

$zhangsan = new Student("张三","男","起航");
$zhangsan->say();
$zhangsan->program();

二、封装

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(){
parent::say();
echo "我的地位是{$this->position}";
}
}

$zhangsan=new Work("张三",22,"总监");
$zhangsan->setSex("女");
$zhangsan->setAge(30);
// $zhangsan->setPosition("董事长");
$zhangsan->position="董事长";
$zhangsan->name="lisi";
$zhangsan->say();

三.多态

3.1、什么是多态?

多态实现多态的条件是实现担任。

1.一个类被多个子类担任,假如这个类的某个要领在多个子类中示意出差异的成果,我们称这种举动为多态。在PHP中的要领重写,

2.实现多态的须要途径:

"; $a->color(); $b->sizes(); echo "打印竣事···
";

}
}

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读