php面向对象基础:类和方法
1.定义
php面向对象是php4引入的概念,而且php4引入的类与对象概念比较简陋,到php5菜真正成熟起来。没有面向对象之前被称为面向过程,比如C语言 没有类与对象的概念
面向过程的方法认为每个小系统都有着明确的开始和明确的结束,开始和结束之间有着严谨的因果关系,只要我们将这个小系统的每一个步骤和影响这个小系统走向的所有因素都分析出来,我们就能完全定义这个行为,就是说,作为上帝,你创造着每一步,事无巨细。比如你做一个网站栏目模块,首先要考虑用户传过来的POST数据是不是为空,要是为空就显示添加表单,不为空首先要检测用户是不是有权限增加栏目,要是没有报错结束,要是有权限,那么要检测用户输入的栏目名是不是为空。。。。。事无巨细,要是项目大,要考虑的分支更多,程序庞大,不好维护,所以我们引入了面向对象这种思想
面向对象与面向过程同样是一种编程方式,是一种编程的思想
面向对象时将世界看做一个个的相互独立的对象,相互之间并无因果关系,他们平时是老死不相往来的,只有在某个外部力量的驱动下,对象之间产生交互,而不同的对象有不同的特点,因此交互产生不同的结果,这个结果,甚至上帝也猜不出来,这些交互构成了这个生动世界的一个过程,在没有外力的作用下,对象则保持静止的状态, 就是说上帝创造了每一个物体,事物,物与物之间再产生的过程上帝不管。
以女娲造人为例:女娲看到人世间冷清,在洗脸的时候看到自己的形象,并在自己的形象上构思,在脑子里想了想,加了2条腿,捏泥人,在泥人产生之前,先产生的是女娲在脑海中构造想象的人的形象,然后根据想象的形象来捏泥人,捏的人都有一个共同特点,是符合脑海中想象的人的形象换句话说 人的形象(类)是抽象的,用来说明人(一类事物)的共同特点的,而每一个人(对象)是具体的,且符合想象的形象(类)的描述。
类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类就是所有对象共同点的一个抽象,就是一个‘制造说明书’。
对象:是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象就是根据‘说明书’造出来的一个具体实例具体对象
我在淘宝买过一个书柜,原以为送过来就是一个现成的柜子,但是快递送过来的时候,才发现是 一张说明书图纸+木板+螺丝钉,要自己组装,说明书说明了板子怎么结合,并画了一张图,就是组装成功后的图,我照着图,最终组合成了一个柜子。
说明书和脑子里面想象的柜子图案就是 类
组装成功的柜子 就是对象
若果原材料很多 我要造1000个柜子,说明书还是只要一份就够了 NEW多个同类型对象只要一个类就够了
在程序中:
在php中用面向对象的话,想造N多个人的对象,需要先创造人的类,且只需要创建一次,然后再由类创造人的对象,可以创造N个人的对象
那么如何声明类呢?
class和object:类(class) 类是对一类事物共性的总结,描述,是抽象的,是概念上的定义,如 人类(属性:一颗头,2只胳膊,2条腿,每个人都有自己的身高,体重,年龄,名字等等)
对象(object) 对象是实际存在的该类事物的每个具体个体,因而也称为实例(instance)比如:奥巴马,克强。
人有什么:类中有属性(身高。体重。姓名),
人能干什么:有功能(吃饭,笑,打招呼。睡觉)
在PHP程序中我们用变量和函数来模拟属性和功能
变量--->属性
函数---->功能 方法
我们把{N个属性+N个方法}打包成一个‘东西’,这个东西就是对象。其实就是N个变量,N个函数,打包到某个对象中,这个对象可以使用这N个变量,N个函数
具体实例:
人类
声明语法:
class 类名{
} 这是类的语法格式
class people{
//public的含义
public $name = 'lisi';
public $height = '175';
public $gender = 'man';
public $weight = '70Kg';
public function cry(){
echo '哭';
}
}
有了类 就可以产生对象了:
格式:new 类名(【参数】);这个语句返回对象new people()
print_r(new people());
返回的对象赋给一个变量
$a = new people();
print_r($a);
对象调用属性:
这个a就是一个对象,里面的name height是属性 a就像一个箱子,里面装了N多个属性和属性值 类似关联数组。
可以看出$a是一个复合数据,我们要访问$a的名字,即name的值 要通过$a来访问 $a->name(属性名)就可以访问该属性的值
echo $a->name,'<br/>',$a->height;
对象调用方法
$a->cry(),'<br/>';
echo print_r($a->cry());
声明类的时候注意事项:
1.关于属性值,可以声明属性并赋值,也可以声明属性先不赋值,如果不赋值,则属性的初始值打印为NULL;
2.关于PHP中的类,属性必须是一个‘直接的量(值)’,要是8种类型任意的‘值’ 不能是‘表达式’如:1+2 不能是函数的返回值如:time();
3.关于方法,在php中函数不能重复定义这点和JS中不一样,但是在类中,类的方法可以理解为‘包在类范围内的函数’,和全局函数不是一回事,因此可以重名,可以重复定义
注意要调用自己定义的和系统函数重名的要加this