一.面向对象
1.面向过程:一个人分步骤完成某个事情
2.面向对象:某件事情拆分为多个任务,由每个对象独立完成,最后调用整合为一个完整的项目
3.三要素:继承、封装、多态。
封装:私有化属性 提供公共访问方法。(直接操作属性不可控。比如年龄赋值999)。
继承:子类对父类的特性的继承
多态:由于子类对父类方法的重写导致的调用同一个方法出现的不同结果就叫多态。
4.优点:易维护、易扩展、易复用
二、类与对象
关系:对象依存于类。一个对象可以隶属于多个类。
对象一般为不可拆分的个体,但一个类也可以是一个对象。比如有47名同学的一个班级,如果把班级作为一个班级类中的一个对象,则这个班级不能包括47个个人。
三、类(成员:属性和方法)
1. 定义类:class--定义一个类
var--类中的属性的修饰符
function--定义类中的一个方法
1 //定义一个类 2 class human{ 3 var $name = ''; 4 var $age = ''; 5 var $sex = ''; 6 var $todo = ''; 7 function showInfo(){ 8 echo '姓名:'.$this->name.'<br>年龄:'.$this->age.'<br>性别:'.$this->sex.'<br>做了什么:'.$this->todo; 9 } 10 }
1.1类中的属性:
定义形式(var是public的别名,public正式):
var $v1 ; //定义不赋值
var $v2 = 2; //定义的同时赋值,值不能是变量,也不能是“计算表达式”
public $v1;
public $2 = 2;
使用形式:
$对象->属性名 //属性名前面没有$符号。
1.2类中的方法:
定义与之前的一样。
使用:对象名->方法名(参数)
方法前可以加修饰词:public,protected,priate,不写默认“public”
方法中的$this是一个“伪对象”,代表当前所属类的当前对象。
注意:一个类的变量初始化必须在构建函数里面进行,不能在变量声明时初始化。
2. 创建一个对象(四种方法)
1 //1.直接new 2 $xiaohong = new renlei(); 3 $xiaohong->name = '小红'; 4 $xiaohong->age = 3; 5 $xiaohong->sex = '男'; 6 $xiaohong->todo = '开炮'; 7 $xiaohong->showInfo(); 8 //2.可变类名 9 $lei = 'renlei'; 10 $xiaoming = new $lei(); 11 $xiaoming->showInfo(); 12 //3.new self:在类的方法内部 代表类本身 13 $xiaogang= new renlei(); 14 $lisi=$xiaogang->cself(); 15 $lisi->showInfo(); 16 //4.通过对象创建对象 17 $xiaogang = new renlei(); 18 $xiaogang->name = "小刚"; 19 $zhangsan = new $xiaogang; 20 $xiaogang->showInfo(); 21 $zhangsan->showInfo();
3.对象的传值(值传递和引用传递--&)
4.一个系统函数:get_class(对象)--获得某个对象的“所属类名”——结果只是一个类名字符串
四、关键字static
1.定义时,在属性/方法前加上static,即可成为静态属性/方法。
2.静态属性和方法隶属于类本身,是所有对象的“共有数据”。
3.使用:类::$静态属性名 //双冒号,带$符号。
4.$this在静态方法中不能使用。(静态方法是类的,$this是对象的,有局限性,非静态方法也不可调用,同理)
五.构造方法/析构方法
特点:方法名固定,不定义也会自动调用
1.构造方法(__construct):创建对象时自动调用,例如:
1 class human{ 2 var $name = ''; 3 function showInfo(){ 4 echo $this->aa; 5 } 6 //构造方法 方法名固定 默认存在 且每次都会调用 7 function __construct($name){ 8 $this->name = $name; 9 } 10 } 11 $person = new human('222'); 12 $person->showInfo();
2.析构方法():销毁对象时自动调用。php代码执行结束会自动销毁对象,可用析构方法查看。
注意:析构方法不能调用,析构方法不能有形参。
手动销毁对象:unset($p1);