7.3.2 PHP畫圖理解對象在內存中的形式
當定義好類后,我們使用new關鍵字來生成一個對象。
$對象名稱 = new 類名稱();
$對象名稱 = new 類名稱([參數列表]);
由于對象資料封裝的特性,對象屬性(類中定義的變量)是無法由主程序區塊直接來訪問的,必須通過對象來調用類中所定義的屬性和行為函數,間接地達成存取控制類中資料的目的。
<?php
//聲明一個電話類Phone
class Phone {
//類中成員同上(略)
}
// 聲明一個人類Person
class Person {
//類中成員同上(略)
}
//通過Person類實例化三個對象$person1、$person2、$person3
$person1 = new Person(); //創建第一個Person類對象,引用名為$person1
$person2 = new Person(); //創建第二個Person類對象,引用名為$person2
$person3 = new Person(); //創建第三個Person類對象,引用名為$person3
//通過Phone類實例化三個對象$phone1、$phone2、$phone3
$phone1 = new Phone(); //創建第一個Phone類對象,引用名為$phone1
$phone2 = new Phone(); //創建第二個Phone類對象,引用名為$phone2
$phone3 = new Phone(); //創建第三個Phone類對象,引用名為$phone3
對象中成員的訪問
類中包含成員屬性與成員方法兩個部分,我們可以使用“new”關鍵字來創建一個對象,即:$引用名 = new 類名(構造參數);那么我們可以使用特殊運算符“->”來訪問對象中的成員屬性或成員方法。如:
$引用名 = new 類名(構造參數);
$引用名->成員屬性=賦值; //對象屬性賦值
echo $引用名->成員屬性; //輸出對象的屬性
$引用名->成員方法(參數);//調用對象的方法
如果對象中的成員不是靜態的,那么這是唯一的訪問方式。
對象和類的關系:
對象是實際存在的,占有動態資源。
類是對象的藍圖,可能占有靜態資源。
對象屬性占有動態資源
類(靜態)屬性實際上是有類名字空間上的“全局變量”
性能考慮:
每個對象要單獨占用數據空間
增加的調用層次可能消耗執行時間
boyfriend.class.php
<?php
/*
* 屬性
* 性別:男
* 年齡: 24
* 身高: 175cm
* 眼睛: 大
*
*
* 行為
*
* 做飯
* 做家務
*
* class 類名 {
*
*
* }
*
* 注意: 在類的成員屬性前面一定要有一個修飾詞, 如果不知道使用什么修飾詞, 就可以使用var (關鍵字), 如果一旦有其它的修飾詞就不要有var
*
*/
class BoyFriend {
//變量 (成員屬性)
var $name = "gaoluofeng";
var $age = 24;
var $sex = "男";
var $height = "175cm";
var $eye = "big";
//函數 (成員方法)
public function doFan($rou, $cai) {
return "做飯的功能<br>";
}
function doJW() {
return "做家務的功能<br>";
}
}
$bf1 = new BoyFriend();
$bf1 -> name = "張三";
$bf2 = new BoyFriend;
$bf2 -> name = "李四";
echo $bf1->sex."<br>";
echo $bf2->height."<br>";
echo $bf1 -> dofan("牛肉", "土豆");
echo $bf2 -> dojw();
test.php
<?php
include "boyfriend.class.php";