面向過程:
將任務,分解爲一個一個的連續的步驟,每個步驟去依次執行,然後最後就完成了既定目標;
面向對象:
將任務,分解爲一個一個的“對象”,每個對象都有其自身的屬性和方法,整個任務的完成,就是這些對象的“各自相互獨立”有有所依從/關聯的一些行爲動作(各自的小任務),最終協調完成既定目標;
類:類是描述一類事物的共有特徵信息的一種語法結構。
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;
對象被銷燬的時候,會自動調用;
訪問總結:
類,對象 --->>> 實例屬性,靜態屬性,實例方法,靜態方法:他們之之間有怎樣的可訪問性(關係)?
文字表達:
$對象->普通屬性;
$對象->普通方法;
類名::類常量;
類名::靜態屬性;
類名::靜態方法;