面向过程:
将任务,分解为一个一个的连续的步骤,每个步骤去依次执行,然后最后就完成了既定目标;
面向对象:
将任务,分解为一个一个的“对象”,每个对象都有其自身的属性和方法,整个任务的完成,就是这些对象的“各自相互独立”有有所依从/关联的一些行为动作(各自的小任务),最终协调完成既定目标;
类:类是描述一类事物的共有特征信息的一种语法结构。
class C{}
对象:就是根据一个类所“生产”(创建)出来的一个“具体实物”。
$o1 = new C(); //对象;
对象的传值方式:
先看对象的存储模式(结构):
$变量 ----> 对象标识符/编号(#1) -----> #1对象数据本身
并且:该变量中存储的实际是该对象的标识符/编号。这个标识符或编号有能力去“指向对象”;
class C{ public $p1 = 1;}
$o1 = new C();
$o2 = $o1; //值传递,此时$o2中存储的也是编号#,此时他们的关系为:
$o1----> 编号(#1) -----> #1对象数据
$o2----> 编号(#1)
$o1->p1 = 2; //修改的是对象#1的p1属性的值;
echo $o2->p1; //2
$o1 = 100;
var_dump($o2); //输出:Object(C)#1{p1 =>2}
echo $o2->p1; //输出:2
因为,此时他们是这样的数据情况:
$o1----> 100 #1对象数据
$o2----> 编号(#1)
$o3 = new C();
$o4 = & $o3; //引用传递,此时他们图示如下:
$o3----> 编号(#2) -----> #2对象数据
$o4
$o3->p1 = 3;
echo $o4->p1 ; //输出:3
如果:
$o3 = 300;
echo $o4->p1; //???——报错!!!!
var_dump($o4); //输出: int(300)
理解:
$o3----> 300 #2对象数据(此时该对象自动销毁了)
$o4
类中成员:
类常量:
const 常量名 = 常量值;
实例属性:
public $属性名 【= 初始值】;
静态属性:
static $属性名 【= 初始值】;
实例方法:
【 public 】 function 方法名(形参1,形参2,...){ 。。。。。}
静态方法:
static 【 public 】 function 方法名(形参1,形参2,...){ 。。。。。}
构造方法:
就是在一个类创建出一个对象的时候会立即自动调用的方法;
方法名必须是一个固定的名字: __construct;
$obj1 = new C(); //此时,如果类C中有构造方法,就必然调用该方法;如果没有,就不会调用。
//如果有构造方法,且带参数,此时new 语法中,也需要有对应的实参;
析构方法:
固定的名称:__destruct;
对象被销毁的时候,会自动调用;
访问总结:
类,对象 --->>> 实例属性,静态属性,实例方法,静态方法:他们之之间有怎样的可访问性(关系)?
文字表达:
$对象->普通属性;
$对象->普通方法;
类名::类常量;
类名::静态属性;
类名::静态方法;