资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PHP+MySQL程序设计,*,PHP5中的继承,继承,是面向对象最重要的特点之一,就是可以实现对类的复用。,通过“继承”一个现有的类,可以使用已经定义的类中的方法和属性。,继承而产生的类叫做,子类。,被继承的类,叫做,父类,,也被成为,超类,。,PHP是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。,从子类的角度看,它“继承(inherit,extends)”自父类;而从父类的角度看,它“派生(derive)”子类。它们指的都是同一个动作,只是角度不同而已。,子类不能继承父类的私有属性和私有方法。,在PHP5中类的方法可以被继承,类的构造函数也能被继承。,继承的简单例子,我们分析自然界中的关系,动物类与犬类的关系。,11/2/2024,1,PHP+MySQL程序设计,PHP5中的继承继承是面向对象最重要的特点之一,就是可以实现,Dog类继承自animal类。当我们实例化animal类的子类Dog类时,父类的方法setWeight()和getWeight()被继承。,我们可以直接调用父类的方法设置其属性$weight,取得其属性$weight。,11/2/2024,2,PHP+MySQL程序设计,Dog类继承自animal类。当我们实例化animal类的子,构造函数的继承,有些资料上说PHP5的构造函数不被继承。,演示的结果证明,PHP5的构造函数被继承了。,当子类Dog1被实例化时,继承的构造函数被调用了。,屏幕上显示了一句I am anAnimal.,11/2/2024,3,PHP+MySQL程序设计,构造函数的继承有些资料上说PHP5的构造函数不被继承。6/1,私有变量和方法不被继承,私有变量不被继承,私有方法也不被继承。,另外一种说法,私有变量和属性被继承了,但不能被调用。,无论怎么说,都,不能调用父类的私有属性和私有方法。,11/2/2024,4,PHP+MySQL程序设计,私有变量和方法不被继承私有变量不被继承,私有方法也不被继承。,11/2/2024,5,PHP+MySQL程序设计,6/12/20235PHP+MySQL程序设计,2.2访问控制,在PHP5中,可以在类的属性和方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。,11/2/2024,6,PHP+MySQL程序设计,2.2访问控制在PHP5中,可以在类的属性和方法前面加上一个,Private的访问权限,private不能直接被外部调用,只能由当前对象调用。,前面介绍过关于封装的内容.这里不再重复。,比如你可以借钱给别人,但不希望别人知道你钱包里面有多少钱。,我们把它用private隐藏起来。,11/2/2024,7,PHP+MySQL程序设计,Private的访问权限private不能直接被外部调用,只,11/2/2024,8,PHP+MySQL程序设计,6/12/20238PHP+MySQL程序设计,11/2/2024,9,PHP+MySQL程序设计,6/12/20239PHP+MySQL程序设计,protected的访问权限,protected修饰的属性和方法只能被子类调用。,外界无法调用。,11/2/2024,10,PHP+MySQL程序设计,protected的访问权限protected修饰的属性和方,11/2/2024,11,PHP+MySQL程序设计,6/12/202311PHP+MySQL程序设计,11/2/2024,12,PHP+MySQL程序设计,6/12/202312PHP+MySQL程序设计,public的访问权限,数据的隐藏和封装是能够帮助我们保护数据的安全性。,Public修饰的属性和方法,可以被无限制的调用。,11/2/2024,13,PHP+MySQL程序设计,public的访问权限数据的隐藏和封装是能够帮助我们保护数据,11/2/2024,14,PHP+MySQL程序设计,6/12/202314PHP+MySQL程序设计,11/2/2024,15,PHP+MySQL程序设计,6/12/202315PHP+MySQL程序设计,2.3重写(override),如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,(,override,),,也称为,方法的重写。,当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法,具有相同的方法名称,在PHP5中不限制输入参数类型、参数数量和返回值类型。(,这点和JAVA不同),子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。,声明方法时,如果不定义访问权限。默认权限为public,。,11/2/2024,16,PHP+MySQL程序设计,2.3重写(override)如果从父类继承的方法不能满足子,PHP5重写方法,先设置一个父类,这个父类是“Dog”类,这个类描述了dog的特性。,Dog有2个眼睛,会跑,会叫。就这样描述先。,我养了一只狗,是只小狗,符合Dog类的特性,但有所不同。,我的小狗有名字,我的小狗太小了,不会大声的叫,只会哼哼。,我们用继承的概念去实现这个设计。,11/2/2024,17,PHP+MySQL程序设计,PHP5重写方法先设置一个父类,这个父类是“Dog”类,这个,11/2/2024,18,PHP+MySQL程序设计,6/12/202318PHP+MySQL程序设计,11/2/2024,19,PHP+MySQL程序设计,6/12/202319PHP+MySQL程序设计,重写方法与访问权限,子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。,父类为public子类为private时。,11/2/2024,20,PHP+MySQL程序设计,重写方法与访问权限子类中的覆盖方法不能使用比父类中被覆盖方法,11/2/2024,21,PHP+MySQL程序设计,6/12/202321PHP+MySQL程序设计,11/2/2024,22,PHP+MySQL程序设计,6/12/202322PHP+MySQL程序设计,重写时的参数数量,子类可以拥有与父类不同的参数数量。(这点与java不同,PHP是弱类型语言。),11/2/2024,23,PHP+MySQL程序设计,重写时的参数数量子类可以拥有与父类不同的参数数量。(这点与j,11/2/2024,24,PHP+MySQL程序设计,6/12/202324PHP+MySQL程序设计,构造函数重写,下面这个例子中,父类和子类都有自己的构造函数,当子类被实例化时,子类的构造函数被调用,而父类的构造函数没有被调用,请对比第一节的构造函数继承。,(注:这点和Java不同,在java中构造函数是不能被继承的,而且子类实例化时,子类的构造函数被调用,父类的构造函数也会调用。),11/2/2024,25,PHP+MySQL程序设计,构造函数重写下面这个例子中,父类和子类都有自己的构造函数,当,11/2/2024,26,PHP+MySQL程序设计,6/12/202326PHP+MySQL程序设计,2.4 this关键字,PHP5中为解决变量的命名冲突和不确定性问题,引入关键字,“$this”,代表其所在,当前对象,。,$this,在构造函数中指该构造函数所创建的新对象,在类中使用当前对象的属性和方法,必须使用,$this-,取值。,方法内的局部变量,不属于对象,不使用,$this,关键字取值。,局部变量和全局变量与,$this,关键字,局部变量的只在当前对象的方法内有效,所以直接使用。,注意:局部变量和属性可以同名,但用法不一样。在使用中,要尽量避免这样使用,以免混淆。,11/2/2024,27,PHP+MySQL程序设计,2.4 this关键字PHP5中为解决变量的命名冲突和不确定,11/2/2024,28,PHP+MySQL程序设计,6/12/202328PHP+MySQL程序设计,用,$this,调用对象中的其它方法,11/2/2024,29,PHP+MySQL程序设计,用$this调用对象中的其它方法6/12/202329PHP,使用,$this,调用构造函数,11/2/2024,30,PHP+MySQL程序设计,使用$this调用构造函数6/12/202330PHP+My,$this,到底指的什么?,$this,就是指当前对象,我们甚至可以返回这个对象使用,$this,11/2/2024,31,PHP+MySQL程序设计,$this到底指的什么?$this就是指当前对象,我们甚至可,通过,$this,传递对象,11/2/2024,32,PHP+MySQL程序设计,通过$this传递对象6/12/202332PHP+MySQ,11/2/2024,33,PHP+MySQL程序设计,6/12/202333PHP+MySQL程序设计,2.5,parent:,关键字,PHP5中使用,parent:,来引用父类的方法。,parent:可用于调用父类中定义的成员方法。,parent:的追溯不仅于直接父类。,通过,parent:,调用父类方法,11/2/2024,34,PHP+MySQL程序设计,2.5 parent:关键字PHP5中使用parent:,11/2/2024,35,PHP+MySQL程序设计,6/12/202335PHP+MySQL程序设计,父类的,private,属性,Private属性是不能被继承的,如果父类有私有的属性。那么父类的方法只为父类的私有属性服务。,在子类中重新定义了一个属性$sal,系统却返回了父类的属性。,如果父类中的属性被子类重写了。结果是这样的。,注意第5行的属性定义变成了protected。,11/2/2024,36,PHP+MySQL程序设计,父类的private属性Private属性是不能被继承的,如,11/2/2024,37,PHP+MySQL程序设计,6/12/202337PHP+MySQL程序设计,11/2/2024,38,PHP+MySQL程序设计,6/12/202338PHP+MySQL程序设计,子类中重写的方法对当前private有效,11/2/2024,39,PHP+MySQL程序设计,子类中重写的方法对当前private有效6/12/20233,如果你学过java,你会觉得这一切都是很难理解的。,在Java中当子类被创建时,父类的属性和方法在内存中都被创建,甚至构造函数也要被调,用。,PHP5不是这样,PHP5调用父类用的是,parent:,而不是,parent-,,这足以说明PHP5不想,在内存中让父类也被创建。PHP5想让继承变的比Java更简单。,适应下就好。,父类的private属性,11/2/2024,40,PHP+MySQL程序设计,如果你学过java,你会觉得这一切都是很难理解的。父类的pr,2.5重载Overload,当类中的方法名相同时,称为方法的重载,(overload),重载是Java等面向对象语言中重要的一部分。,在PHP5中不支持重载。,在PHP5中不支持重载。,11/2/2024,41,PHP+MySQL程序设计,2.5重载Overload当类中的方法名相同时,称为方法的重,如果传递过来三个数值。如何计算?,下面的写法,在Java中是太平常不过了。但是在PHP5中,不能这样。,PHP5不支持有多个相同名称的方法,也就是不支持重载。,11/2/2024,42,PHP+MySQL程序设计,如果传递过来三个数值。如何计算?6/12/202342PHP,对于一个方法,缺少参数时候会报错。,当参数太多的时候,PHP就当什么都没有看到。程序可以正常运行。,11/2/2024,43,PHP+MySQL程序设计,对于一个方法,缺少参数时候会报错。6/12/202343PH,
展开阅读全文