看完就能掌握的PHP核心技术 - ????????面向对象
发布时间:2020-12-13 20:59:58 所属栏目:PHP教程 来源:网络整理
导读:继承和多态 类的组合与继承 假设我们有两个类,一个 person,另外一个是 family;在 family 类中我们创建 person 类中的对象,并且我们把这个对象视为 family 类的一个属性,并调用它的方法处理问题,那么这种复用方式也称为组合。 类与类之间还有一种父与子
继承和多态类的组合与继承
<?php class person{ public $name = 'Tom'; $genderstatic $money = 10000public function __construct(){ echo '这里是父类',PHP_EOL; } say(){ echo $this->name,"t is ",$this->gender,"rn"; } } class family extends$name$age$money = 1000 __construct(){ parent::__construct(); echo '这里是子类',1)"> say(){ parent::say(); $this->age,1)"> cry(){ echo parent::$money,1)">; echo '% >_< %',1)">echo self::echo "(*^_^*)"; } } $poor = new family(); $poor->name = 'Lee'; $poor->gender = 'female'$poor->age = 25$poor->say(); $poor->cry(); 返回结果 这里是父类 这里是子类 Lee is female Lee is female,and is 25 10000 % >_< % 1000 (*^_^*)%
例如:
编程中
低耦合
解耦
组合 <?php car{ addoil(){ echo "Add oil rn"class bmw car{ } benz{ $car __construct(){ $this->car = car(); } addoil(){ $this->car->addoil(); } } $bmw = bmw(); $bmw->addoil(); $benz = benz(); $benz->addoil();
如何使用继承:
既要组合的灵活,又要继承的简洁
traits 的用法
<?php trait Drive { $carName = 'BMW'; driving() { echo "driving {$this->carName}n"; } } Person { age() { echo "i am 18 years oldn"class Student use Drive; study() { echo "Learn to drive n"; } } $student = Student(); $student->study(); age(); $student->driving(); Learn to drive i am 18 years old driving BMW
如果 Trait、基类和本类中都存在某个同名的属性或者方法,最终会保留哪一个呢 <? hello() { echo "hello 周伯通n"; } echo "周伯通不会开车n"echo "hello 大家好n"echo "大家都会开车n"use Drive;//trait 的方法覆盖了基类Person中的方法,所以Person中的hello 和driving被覆盖 echo "hello 新学员n";当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,所以此处hello会覆盖trait中的hello } } hello(); hello 新学员 周伯通不会开车
如果要组合多个 Trait,通过逗号分隔 Trait 名称: use Trait1,Trait2;
<?php trait Hello { sayHello() { echo "Hello 我是周伯通n"; } } trait World { Hello; sayWorld() { echo "hello worldn"abstract getWorld(); inc() { $c = 0$c = $c + 1echo "$cn"static doSomething() { echo "Doing somethingn" HelloWorld { World; getWorld() { return 'do you get World ?'$Obj = HelloWorld(); $Obj->sayHello(); sayWorld(); $Obj->getWorld() . "n"; HelloWorld::doSomething(); inc(); $Obj->inc(); Hello 我是周伯通 hello world do you get World ? Doing something 1 2 语言中得多态
案例
<? employee{ protected working(){ echo '本方法需要重载才能运行'class teacher echo '教书'class coder echo '敲代码'function doprint($obj){ get_class 获取当前对象调用的类名 if(get_class($obj)=='employee'echo 'Error'; }else{ $obj->working(); } } doprint( teacher()); doprint( coder()); doprint(new employee());
<?interface working(); } implementsfunction doprint(employee $i){ $i->working(); } $a= teacher; $b= coder; doprint($a); doprint($b);
总结
更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新) 还有更多进阶学习资料领取进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |