image.png

假设现在有一个需求,要你用PHP来描述一只猫,你打算怎么做?


是了,上一节刚刚学过数组,用数组来描述是一个比较不错的选择。但是,php也是支持面向对象的,就是说,我们可以像Java一样,在PHP中定义一个猫类。


代码大概长这样:

	class Cat {

		//公共属性 名称
		public $name;

		//公共属性 毛色
		public $color;

		//公共属性 年龄
		public $age;

	}

PHP中的类定义和Java只有两个不同,一个是定义属性的时候,不需要加上类型名,直接用$

另一个不同点是调用属性或者方法不是用.  而是用->


比如,我现在去给这个猫的三个属性赋值,就这样做:

	//生成猫的真实对象 , $cat只是一个引用,指向真实的猫的实例内存空间
	$cat = new Cat();	
	$cat->name = '小白';
	$cat->color = '白';
	$cat->age = 3;

	$cat2 = new Cat();	
	$cat2->name = '小花';
	$cat2->color = '花';
	$cat2->age = 10;

$cat是一个对象,对象可以访问里面的属性,访问属性用->


class 是一个关键字,表示这是一个类,不能修改。public $name , 是一个成员属性, 我们类定义的{} 中定义的变量,就是一个成员属性。public 是访问修饰符, 他是用于控制成员属性(变量)的访问范围的, 除了public还有两个,protected 和 private 。其中,public修饰的属性在任何地方都能够被访问,而protected修饰的属性只能在类里面或者这个类的子类中被访问。至于privat,那就更可怜了,除了当前类的内部,其他地方都没有办法访问到。


$cat = new Cat();


这句话表示我们创建一个Cat类型的实例对象。$cat就是一个对象。

new 是一个关键字,表示新创建一个对象。

    $cat->name = '小白'; 表示给成员属性赋值,-> 符号叫做对象运算符。我们可以把它想象成古代将军行军打仗配的虎符,有了这个符号,就可以调用对象的属性。



什么是类?


类就好比是一个模板,它不是一个实实在在的产品,就好比是一个未出厂的手机,类的成员属性就好比是这个手机未来可能安装的APP。比如,你去X宝购买一个小米手机,最新的MUI和安卓系统,自然是支持QQ和微信的。


image.png


那么就是说,手机类中应该有一个QQ属性和WeChat属性,对不对?


OK,问题来了,只要你还没有使用new关键字去创造一个真实的手机对象,那么这个手机还只是一个样机,没有开发票和进入你自己的口袋。但是,这些都并不妨碍这个手机拥有安装QQ和微信的能力。而只有当这个手机被卖出去了,那么我想你一定会给它安装QQ和微信。这个时候,手机对象的QQ和WeChat属性也就跟着产生了,拥有了实际的意义。


因此,对于类中的普通成员属性而言,一定要等到这个类new出一个对象,才会有意义。换言之,这些属性才会真实存在。



需要注意的是,php的类里面的属性,在定义的时候,你没有办法知道它到底是什么类型,而只有当你给它赋值时,才会临时决定属性的类型。


类的定义

class  类名{

    访问修饰符 成员属性1;
    访问修饰符 成员属性2;
    
    //.....
    
    访问修饰符 function 成员方法名(参数列表){
        方法体
    }
    
    
}


1.1 成员属性

成员属性是类的一个组成部分,一般是基本数据类型(整数,字符串等), 还可以是数组。成员属性可以赋初值,但是赋初值的时候不能new(这一点和Java是不同的!)


1.2 成员方法(函数)

当我们需要让对象完成某个任务(比如计算,比如上传下载文件,分页等等), 就需要在类中定义函数, 这时我们就将这样的函数称为 成员方法。


成员方法的基本语法

class  类名{

成员属性;

访问修饰符  function  成员方法1(形参){

    方法体;

  return 语句;//[程序员自己决定的,]

}

访问修饰符  function  成员方法1(形参){

    方法体;

return 语句;//

}

 

}

 

说明

(1) 成员方法定义在类中.

(2) 成员方法前面可以有访问修饰符,如果你不写,默认为public

(3) 成员方法的运行原理和普通的函数是一样的.