子类的应用场景以及访问控制符的应用---2019-9-30
程序员文章站
2022-03-20 22:37:46
...
1、实例演示子类的三个应用场景
实例
<?php namespace _0930task1; class commodity{ //属性 public $name; public $model; public $number; // 构造方法 public function __construct($name,$model,$number){ $this->name=$name; $this->model=$model; $this->number=$number; } // 普通方法 public function getInfo(){ return '商品名称:'.$this->name.',型号:'.$this->model.',***数量:'.$this->number; } } // 子类作用一:代码复用 class child1 extends commodity{ //... } echo (new child1('华为','P30','10'))->getInfo(); echo '<hr>'; // 子类作用二:扩展父类中的功能(属性和方法) class child2 extends commodity{ public $price; public function __construct($name,$model,$number,$price){ parent::__construct($name,$model,$number);//继承父类中的原有方法 $this->price=$price; } // 增加一个新的方法 public function total(){ return round($this->number*$this->price,2); } } echo '原价:'.(new child2('华为','P30','10','4567.123'))->total(); echo '<hr>'; // 子类作用三:方法重写 class child3 extends child2 { public function total(){ $total=parent::total(); switch(true) { case($total>70000): $discountRate=0.7; break; case($total>50000): $discountRate=0.8; break; case ($total>20000): $discountRate=0.9; break; default: $discountRate=1; } return '折扣价为:'.$total*$discountRate.'折扣率:<span style="color:red">'.$discountRate.'<span>'; } } echo (new child3('华为','P30','10','4567.123'))->total();
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行结果:
类的继承应用最多的功能应该是代码复用以及对功能扩展。
2、实例演示类成员的三种访问限制符的使用场景
实例
<?php namespace _0930task2; class staff{ // 属性 public $name; public $age; private $gender; private $salary; protected $position; protected $department; // 构造方法 public function __construct($name,$age,$gender,$salary,$position,$department) { $this->name = $name ; $this->age = $age; $this->gender = $gender; $this->salary = $salary; $this->position =$position; $this->department = $department; } public function getPublic(){ return 'public定义属性--姓名:'.$this->name.',年龄:'.$this->age; } // 获取私有控制符定义的属性 public function getPrivate(){ return 'private定义属性--性别:'.$this->gender.',薪资:'.$this->salary; } // 获取受保护控制符定义的属性 public function getProtected(){ return 'protected定义属性--职位:'.$this->position .',部门:'.$this->department; } } $obj = new staff('Reid','19','男','20000','饮水机看守员','项目部'); echo $obj->getPublic(),'<hr>'; echo $obj->getPrivate(),'<hr>'; echo $obj->getProtected(),'<hr>'; class child1 extends staff{ public function getInfo1(){ return $this->department; } public function getInfo2(){ return $this->salary; } } $obj = new child1('Reid','19','男','20000','饮水机看守员','项目部'); echo $obj->getInfo1(),'<hr>'; echo $obj->getInfo2();
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行结果:
访问控制符定义属性:
public: 在类中和类外边都可以通过对象属性直接进行访问;
protected: 在类中和类外边都不能直接通过对象属性进行访问,通过在本类以及其子类中定义一个方法(访问器)来进行访问;
private:在类中和类外边都不能直接通过对象属性进行访问,通过在类中定义一个方法(访问器)来进行访问;不能直接在子类中定义方法来访问该属性,需要在调用父类中的方法进行访问。
上一篇: HTML+CSS和DIV如何实现排版布局
下一篇: 抽象类和接口---2019-10-09
推荐阅读
-
C# web应用程序不能访问app_code下类的原因以及解决方法
-
RabbitMQ的应用场景以及基本原理介绍
-
7分钟读懂Go的临时对象池pool以及其应用场景
-
单调栈的思想以及场景应用
-
【面试篇】Java的反射机制以及应用场景
-
RabbitMQ的应用场景以及基本原理介绍
-
C# web应用程序不能访问app_code下类的原因以及解决方法
-
闭包的原理与经典应用场景,访问器属性,类与对象的创建与成员引用,数组与对象的解构过程与经典案例,JS引入到浏览器中的的方法及获取DOM元素的两个API
-
缓存的应用场景以及要注意的问题
-
闭包的原理与经典应用场景 、访问器属性、类与对象的创建与成员引用 、数组与对象的解构、JS引入到浏览器中的的方法