开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:面向对象开发规范】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12662
面向对象开发规范
内容介绍:
一、面向对象开发规范
一、面向对象开发规范
1、目标
了解面向对象的基本开发规范,熟练运用开发规范实现项目开发
2、概念
开发规范:开发者约定俗成的开发设计方式,并不是语法要求必须做,程序员多年积累总结。
(1)属性的初始化
①属性是类对于同类事务所抽离出来的共性数据,本身在类结构中没有价值,是当具体对象产生之后,属于对象本身的,要进入对象的内存空间,类里面没有价值。
②进行类中定义属性的时候,通常不会对属性进行初始化,除非属性本身的值也具有共性。
③属性如果没有初始化数据,那么在产生对象后应该对属性完成初始化,有的属性是在操作过程中被初始化。
(2)访问修饰限定符选择:访问修饰限定符是用来限制类成员被对象访问时对象所处位置的。访问的权限从 public、protected 到 private依次变小(类对成员的控制权限依次变大)(public 到处能访问,private 只有类的内部能访问,外面能访问的区域变小,私有化越强)
①设定好的类成员本身不会被外部用到,那么应该使用 private 或者 protected
②设定好的类成员一定会给外部访问,使用 public(自己写可以开始都 public ,里面有一些 public 定义之后外面不用,立马变成 private)
③属性通常 private 居多,如果需要外部访问属性,通常会定义相关方法来实现属性的查看和修改,因为可以在方法内对数据逻辑进行代码控制,安全(数据可以进行内部操作、逻辑处理,不允许外面随便做)
④尽可能增加类对成员的控制(尽可能多使用 private,少使用 public)(主体是自己来做,让别人能用仅限于能用,内部操作不需要知道,用什么东西开接口,开 public 的方法)
3、示例
(1)属性初始化
class saler{
# 属性
public $count;
# 某个卖家拥有的商品数量,每位具体卖家对象拥有的不可能一样,所以没必要初始化
protected $discount;
# 某个卖家针对销售的折扣,同样没有统一的价值
private $money=0;
# 某个卖家的账户余额,任何一位卖家一开始做生意的时候,账户余额都为0,所以可以初始化
# 业务初始化属性
public function setdiscount($discount = 1){
#可以进行安全逻辑控制
$this->discount = $discount;
}
}
属性一般情况像 count、打折不需要初始化,但是作为一个卖家首先有一个账户,所有的卖家一上来账户里面余额肯定为0,所以此时对它初始化是可以的,不知道打几折、不知道有多少个账户,有了这个东西之后,会给它一个方法 set discount 外面给一个值传进来,在里面进行修改,此时可以加逻辑限定,比如此时可以保证里面可以进行安全逻辑控制不出错,比如打0折、打1折,打0.01折,有点过分相当于白送,所以可以在里面控制不让外面随便去改。
# 实例化对象,初始化属性
$s =new saler();
$s->count = 100;
# 打折促销:业务初始化
$s->setDiscount(0.8);
赋值 100,打折设置折扣为0.8,可以实现属性的初始化操作。
(2)访问修饰限定符选择
class saler{
# 属性
public $count;
private $money = 0;
# 增加方法操作私有属性money
public function getmoney(){
return $this->money;
}
public function setmoney($money){
# 可以对逻辑进行修改,对数据进行安全判定,保证数据的安全性$this->money = $money;
# $this->money 是属性,$money 是外部传入的参数,二者同名但是性质完全不同
}
}
$ 私有卖家知道卖什么东西什么价格就可以,与账户多少钱无关,定义一个 get 方法,还可以做逻辑验证是否有权限查看,没权限可以不给查看。增加钱同样 setMoney ,属性等于外面传出的变量赋值好,外部传的形参一般会与属性名相同,但是不是一个东西,一个是局部变量形参数,一个是属性属于类里面对象。
访问修饰限定符的选择,选择好之后可以增加它的安全性和优势来修改选择所带来的弊端,代码量自然就增加,但是面向对象本来就不是一种能够节省代码量的编程思想,它的思想是怎么能够做到安全,怎么能够做得更人性化,符合人类的思维逻辑。
4、小结
(1)属性在类中定义的时候,通常不会初始化值,除非所有类实例化得到的对象的某个属性需要是统一值
(2)应该尽可能增加类对成员的控制,即使用范围较小的访问修饰限定符优先(能用 private 的地方就不用 protected,能用 protected 就不用 public,实在不行才用 public,比如都没有类没用。
(3)属性通常是私有化的,一般是通过设定方法来实现属性的访问和修改(公共的主要原因是能够在方法里面,进行逻辑的把控,能够保证数据的安全)