深入PHP 第三章笔记
类和对象:
类是对象的模版,对象是类的实例,数据的实例化。
一个类可以生成N个对象,但是这些对象是相同类型的不同个体。就像同一个模子生产的不同手机一样,虽然他们是同一个模子出来的,但是都是单独的个体,在对象的生命周期内,PHP会记录每一个对象。
类的属性的作用域:
对于关键字,public,protected,private用作用域来形容他们更形象一些,因为他们可以定义数据是在外部可以访问还是内部可以访问,规定了数据的访问位置。
关于public的数据类型:
因为PHP是弱类型语言:可以动态给对象添加属性;
如:class table {}
$table = new table;
$table->field1 = 'filed1';//此时相当于给对象新添加了属性,或者会覆盖已有的public的数据值,造成数据的可变性,和不安全性。而且在使用的时候和设置的值的时候有可能由于单词拼写的错误造成属性的增加,以及数据的不正确性。
所以对于public的数据类型我们要严格控制。
1:我们应该使用构造函数来初始化变量。节省工作量,减少我们自己定义变量值时的单词错误。
2:使用函数来返回数据,减少单词拼写带来的错误,因为PHP不会提示为设置的变量,但是会提示 未设置的函数,而且是使用函数更有益于API的实现,及错误定位,修改,及维护。
参数和类型:
除了,字符,数字,布尔等基本数据类型外,类也是一种数据类型,由此可知对象是数据类型也是类的这一类的数据类型。
如同变量,再给PHP方法和函数的参数定义时不用定义参数类型,这造成方便了,也造成不便。参数是任何类型给我带来很大遍历,但是需要特定类型类型的参数时,我们不得不检验参数类型:
对于基本数据类型的 ,我们不实用函数来检验:
is_string,is_bool,is_numceric,is_null,is_resource,is_double等等。
在面向对象开发中,我们的记住专注开发,忽略上下文,这以重要原则:
解决参数的三种方式:
public function test1($test) {
if(is_bool($test)) {} //强制判断性。
}
/*
*@param bool
*/
public function test1($test) {
if($test){} //注视提示性。
}
public function test1($test) {
if(preg_match('/false|on|off/',$test)){} //特殊字符型。
}
在PHP参数类型处理是很重要的,要提供好文档。
对象参数类型:
PHP5提供了类型提示 (type hint)
public function test (类名 参数名) //对对象的支持
public function test (arrray 参数名) //对数组的支持
关于继承:
首先我们要确定,那些属性是属于基类的,那些属性是可以被子类访问的。
基类属性的一定要是公共的,所有子类的都可能要有的属性的一定要定义在基类。
关于重写父方法:
如果想保持父方法的作用一定要在 函数内部使用 parent::方法名(参数值,....)
Public,protected,private:管理类的访问
public:在任何地方都可以访问public类型的属性和方法;
protected:自有在类内部和子类内部才可以访问的属性和方法
private:自有在类内部才能访问的属性和方法
这些可见性关键字:规定我们值公开客服端的那些部分,给出了一个清晰的接口。
建议:在客服端访问类的属性时,最好不要直接访问,可以提供一个方法来访问。这样的方法叫做 getter,setter.
最好对所有的属性设置private,protected.
方法可以大部分设置为public,除非你确定这个方法只为类内部提供作用。