昨天我们学习了面向对象的原理和基础,今天我们要学习的是面向对象的其中一个特征----继承。
一、继承
1.继承的基本概念
将一个类A中的特性信息,传递到另一个类B中,此时就称为,B继承A,A派生出B;
基本语法:
关于继承的几个基本概念
继承:一个类从另一个已有的类获取其特性,称为继承。
派生:从一个已有的类产生一个新 的类;
父类/子类:已有类为父类,新建类为子类。
单继承:一个类只能从一个上级类继承其特性信息,php和大多数面向对象的语言都是单继承模式。c++为多继承;
扩展:在子类中来定义自己的一些新的特性的信息。没有扩展,继承也就没有意义了;
2.访问控制修饰符
访问控制修饰符的作用是:用来限制其所修饰成员的可访问性;
可访问性:就是在代码中使用这样两种语法形式的有效性;
对象->实例属性或方法
类::静态属性或方法
形式:
class 类名{
访问控制修饰符 属性或者方法定义;
}
访问控制修饰符有3种:
public:公共的,在所有位置都可以访问;
protected:受保护的,只能在该类内部或者该类的子类或父类中访问;
private:私有的,只能在该类内部访问;
总结:
public修饰的成员,在哪里都是可以访问的;
类的内部,可以访问任何级别的成员;
3.parent关键词
parent 表示‘父母’的意思,在面向对象语法中,代表‘父类’;
其本质上就是代表父类这个类,而不是类的对象;
其使用方法为 : parent::属性或者方法 //在这里通常是静态属性或静态方法,但有时候可能是实例属性或实例方法;
4.构造方法和析构方法调用上级同类方法的问题
1.如果一个类中有自己的构造方法,在new的时候就会使用自己的构造方法,如果没有就会使用父级类的构造方法。
2.析构方法与构造方法类似,同上;
3.如果一个类中有构造方法和析构方法,也可以手动的去调用父级类的构造方法和析构方法:利用parent::.....
4.在子类的构造方法中,常常去调用父类的构造方法,以简化对象初始化工作
5.覆盖
将一个类从父类中继承过来的属性和方法“重新定义”----此时相当于子类不想用父类的属性或方法,而是要从新定义。
覆盖的实现需要:
对于一个父类,或许其属性的现有数据,子类觉得不适合,而需要有自己的新的描述;或许其方法,子类觉得不合适,需要自己来从新定义该方法中要做的事;
覆盖有叫“重写”;
重写的要求:
子类覆盖的属性或方法的访问控制权限不能低于父类的被覆盖的属性或方法的访问控制权限:
父类:public 子类 :只能是public;
父类:protected 子类: protected或public;
子类覆盖父类的同名方法时,参数要与父类保持一致;
注意:
父类私有属性不能被覆盖,但子类可以定义自己和父类同名的属性。
父类的私有方法不能被覆盖,子类也不能定义同名方法;
6.最终类
最终类其实就是一种特殊要求的类,要求该类不允许往下继承下去;
final class 类名{
//类内部跟其他类没有区别;
}
7.最终方法
最终方法,就是一个不允许下级类去覆盖的方法!!
class 类{
final function f_name(){......};
}
8.设计模式
什么叫设计模式?
简单来讲,设计模式就是解决某个问题的一般性代码的经验性总结。
工厂模式:
所谓工厂模式,就是这样一个类(工厂类):它可以根据“传递”给他的类名,而去生产出对应的类的对象;
单例模式:
单利模式就是设计这样一个类,这个类只能创造出一个对象;
二.设计一个类,mysql数据库操作类
设计目标:
1.该类一实例化,就可以自动连接上mysql数据库;
2.该类可以单独去设定要使用的连接编码)(set names XXX)
3.该类可以单独去设定要使用的数据库(use XXX);
4.可以主动关闭连接;
上述设计目录,大致相当于如下几行代码:
$link = mysql_connect("","","");
mysql_query('set names XXX');
mysql_query("use XXX");
然后,后面可以执行各种sql语句;