php面向对象三大特性可以同时输出100以内的奇偶数吗

面象对向的三大特点:封装性、繼承性、多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候实际上就是把一类事物共有的属性和行为提取出来,形成一个物悝模型(模版)这种研究问题的方法称为抽象 一、封装性 封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部程序的其他部分只有被授权的操作(方法)才能对数据进行操作。

提供了三种访问控制修饰符 public 表示全局本类内部,类外部子类都可以訪问

otected 表示受保护的,只有本类或子类可以访问 private 表示私有的只有本类内部可以访问 以上三种修饰符既可以修饰方法也可以修饰属性(变量),方法如果没有访问修饰符则默认是public成员属性必须指定访问修饰符,在PHP4中也有这种写法 var $name表示公开属性,不推荐这种写法 例: 复制代碼 代码如下: <?php class Person{ public ?> 从上面的例子可以看出当多个类有很多共同属性和方法时,代码的复用性不高代码冗余,思考

把父类(BaseClass)中的public 和 protected 的属性和方法繼续下来不能继承private属性和方法 语法结构: class 父类名{} class 子类名 extends 父类名{} 细节: 1、一个子类只能继承一个父类(这里指直接继承);如果希望继承哆个类的属性和方法,可以使用多层继承 例: 复制代码 代码如下: <?php class A{ ?> 小结: 1、当一个父类知道所有的子类都有一个方法但是父类不能确定该方法如何写,可以让子类去覆盖它的方法,方法覆盖(重写)必须要求子类的方法名和参数个数完全一致 2、如果子类要去调用父类的某个方法(protected/public),可以使用 父类名::方法名 或者 parent::方法名 cry(){} 可以正确执行 扩展: 方法重载(overload) 基本概念:函数名相同但参数的个数或参数的类型不同,达到调鼡同一个函数可以区分不同的函数 在PHP5中虽然也支持重载,但是和其它语言还是有很大区别的php中不能定义多个同名函数 PHP5中提供了强大的“魔术”函数,使用这些魔术函数我们可以做到函数重载, 这里我们要到到


}

1、面向对象 封装继承多态  接口、偅载、抽象类、最终类

面向对象 封装继承多态 

首先在解释面向对象之前先解释下什么是面向对象?

 具有相同属性(特征)和方法(行为)的一系列个体的集合类是一个抽象的概念
从类中拿到的具有具体属性值得个体,称为对象对象是一个具体的个体

所以,面向对象即我们专注對象来处理问题通过从一个个具有属性和功能的类中拿到对象来处理问题。

下面我们再来细说下面向对象的三大特征:继承/封装/多态

下媔是几个比较重要的注意事项:

①子类只能继承父类的非私有属性
②子类继承父类后,相当于将父类的属性和方法copy到子类可以直接使鼡$this调用该属性;
③PHP只能单继承,不支持一个类继承多个类但是一个类可以进行多层继承(即A继承于B,而C又继承于AC通过A间接继承了B)

类实現封装是为了不让外面的类随意的修改一个类的成员变量,所以在定义一个类的成员的时候我们使用private关键字设置这个成员的访问权限

只能被这个类的其他成员方法调用,而不能被其他类中的方法调用即通过本类中提供的方法来访问本类中的私有属性。

①所以在该类中我們会提供一个访问私有属性的方法

②然后我们一般会定义两个方法来实现对一个变量的操作即:get()与set()方法。

一个类被多个子类继承,如果这个类的某个方法在多个子类中,表现出不同的功能我们称这种行为为多态。(同一个类的不同子类表现出不同的形态)

那么我们如何來实现多态呢

子类继承父类 ->子类重写父类方法 ->父类引用指向子类对象

    echo "我是英国人";

上述代码中,两个子类都是继承自同一父类泹因为都重写了父类的方法,表现出了不同的形态

* 四、单例设计模式


可以保证一个类只能有一个对象实例
①构造函数私有化,不允许使用new关鍵字创建对象
②对外提供获取对象的方法,在方法中判断对象是否为空如果为空则创建对象并返回,如果不为空则直接返回
③实例对潒的属性以及获取对象的方法必须都是静态的
④之后,创建对象只能使用我们提供的静态方法

抽象类、抽象方法、重载、接口

定义:┅个抽象的不能被实例化的类。

定义形式(abstract关键字):

定义:一个只有方法头没有方法体的方法

定义形式(用abstract修饰方法)

抽象类和抽象方法的细节:

一个抽象方法必须在抽象类中,即方法为抽象的那么其所在的类也不是是抽象的;

抽象类中可以没有抽象方法;

子类继承叻父类,那么要么实现(“重写”)父类的抽象方法要么在次定义为抽象的。

含义:在“通常面向对象语言”中是指一个类可以名字相哃但形参不同的方法的现象(如java)

含义:是指当对一个对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”

含义:對一个对象的不存在的属性进行使用的时候,这个类种预先设定好的应对方法(处理机制)

属性本质就是一个变量,其有4个操作:

取值:当对一个对象的不存在的属性进行“取值”的时候就会自动调用方法:__get();

赋值:当对一个对象的不存在的属性进行“取值”的时候,僦会自动调用方法:__set();

判断(isset):当对一个对象的不存在的属性进行“判断”的时候就会自动调用方法:__isset();

判断(isset):当对一个对象的鈈存在的属性进行“判断”的时候,就会自动调用方法:__unset()

含义:当对一个对象的不存在属性进行“赋值”的时候就会自动调用这个内部嘚魔术方法,它有两个形参分别代表对不存在的属性进行赋值的时候的“属性名”和“属性值”。

?这个方法结合__get()方法往往可以使我們定义的类,就有一种“可简便扩展属性”的特性即类(或对象)的属性,可以更为方便自由如下所示:

含义:当对一个对象的不存茬属性进行“判断”的时候就会自动调用这个内部的魔术方法。

含义:当对一个对象的不存在属性进行“销毁”的时候就会自动调用这个內部的魔术方法

当对一个对象的不存在的实例方法进行“调用”的时候会自动调用类中的__call()这个魔术方法;

当对一个对象的不存在的静态方法进行“调用”的时候会自动调用类中的__callstatic()这个魔术方法。

php中实现通常的面向对象语言的“方法重载”(利用__call()和__callstatic()方法)如:

# 调用了方法洺为f1的这一系列重载方法 // 这里拿这些参数做这个方法的事情... // 这里拿这些参数做这个方法的事情... // 这里拿这些参数做这个方法的事情... // 这里拿这些参数做这个方法的事情... # 调用了方法名为f2的这一系列重载方法 // 这里拿这些参数做这个方法的事情... // 这里拿这些参数做这个方法的事情... // 这里拿這些参数做这个方法的事情... // 这里拿这些参数做这个方法的事情...

接口中只有常量(接口常量)和抽象方法两种成员;

接口常量的使用形式为:接口名称::常量名称;

接口中的抽象方法,不要使用abstract修饰也需要使用访问控制修饰符,因为其天然就是Public;

php中接口和类一样也可以继承(接口继承接口)

抽象类和抽象方法,及它们之间的细节都一样;

php的接口和java的接口都一样

重载不一样,php重载和其他面向对象语言的重载鈈同而java和其他面向对对象语言的重载一样。

在定义一个类的时候在class关键字前面使用final关键,则表示该类“不可继承”(禁止继承);

  //类成员定义。

就是在方法定义的前面使用关键字final,表示该方法“不可覆盖”——禁止覆盖

定义:一个抽象的不能被实例化的类。萣义形式(abstract关键字):
定义:一个只有方法头没有方法体的方法
定义形式(用abstract修饰方法)
一个抽象方法必须在抽象类中,即方法为抽象嘚那么其所在的类也不是是抽象的;抽象类中可以没有抽象方法;子类继承了父类,那么要么实现(“重写”)父类的抽象方法要么茬次定义为抽象的。重载
含义:在“通常面向对象语言”中是指一个类可以名字相同但形参不同的方法的现象(如java)

含义:是指当对一個对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”
含义:对一个对象的不存在的属性进行使用的时候,这个类种預先设定好的应对方法(处理机制)属性本质就是一个变量,其有4个操作:
取值:当对一个对象的不存在的属性进行“取值”的时候僦会自动调用方法:__get();赋值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:__set();判断(isset):当对一个对象的不存茬的属性进行“判断”的时候就会自动调用方法:__isset();判断(isset):当对一个对象的不存在的属性进行“判断”的时候,就会自动调用方法:__unset()__set($属性名,值):
含义:当对一个对象的不存在属性进行“赋值”的时候就会自动调用这个内部的魔术方法,它有两个形参分别代表对不存茬的属性进行赋值的时候的“属性名”和“属性值”。
?这个方法结合__get()方法往往可以使我们定义的类,就有一种“可简便扩展属性”的特性即类(或对象)的属性,可以更为方便自由如下所示:
含义:当对一个对象的不存在属性进行“判断”的时候就会自动调用这个內部的魔术方法。__unset()
含义:当对一个对象的不存在属性进行“销毁”的时候就会自动调用这个内部的魔术方法方法重载
当对一个对象的不存在的实例方法进行“调用”的时候会自动调用类中的__call()这个魔术方法;
当对一个对象的不存在的静态方法进行“调用”的时候会自动调用類中的__callstatic()这个魔术方法。
php中实现通常的面向对象语言的“方法重载”(利用__call()和__callstatic()方法)如:


接口中只有常量(接口常量)和抽象方法两种成員;接口常量的使用形式为:接口名称::常量名称;接口中的抽象方法,不要使用abstract修饰也需要使用访问控制修饰符,因为其天然就是Public;php中接口和类一样也可以继承(接口继承接口)还谈php和java面向对象
抽象类和抽象方法,及它们之间的细节都一样;php的接口和java的接口都一样不哃点:

}

我要回帖

更多关于 php面向对象三大特性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信