继承和多态
类的组合与继承
<?PHP class person{ public $name = 'Tom'; $genderstatic $money = 10000public function __construct(){ echo '这里是父类',PHP_EOL; } say(){ echo $this->name,"\t is ",$this->gender,"\r\n"; } } 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 \r\n"class bmw car{ } benz{ $car __construct(){ $this->car = car(); } addoil(){ $this->car->addoil(); } } $bmw = bmw(); $bmw->addoil(); $benz = benz(); $benz->addoil();
如何使用继承:
既要组合的灵活,又要继承的简洁
traits 的用法
- 通过在类中使用 use 关键字声明要组合的 Trait 名称,而具体某个 Trait 的声明使用 trait 关键词,Trait 不能直接实例化
<?PHP trait Drive { $carName = 'BMW'; driving() { echo "driving {$this->carName}\n"; } } Person { age() { echo "i am 18 years old\n"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,通过逗号分隔 Trait 名称:
use Trait1,Trait2;
<?PHP trait Hello { sayHello() { echo "Hello 我是周伯通\n"; } } trait World { Hello; sayWorld() { echo "hello world\n"abstract getWorld(); inc() { $c = 0$c = $c + 1echo "$c\n"static doSomething() { echo "Doing something\n" 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
语言中得多态
- 多态准确的含义是:同一类的对象收到相同消息时,会得到不同的结果。而这个消息是不可预测的。多态:顾名思义,就是多种状态,也就是多种结果
- 多态性是一种通过多种状态或阶段描述相同对象的编程方式。它真正的意义在于:实际开发中,只要关心一个接口或基类的编程,而不必关心一个对象所属于的具体类
案例
- 通过接口实现多态
<?interface working(); } implementsfunction doprint(employee $i){ $i->working(); } $a= teacher; $b= coder; doprint($a); doprint($b);
总结
更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)
还有更多进阶学习资料领取进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】