php物件導向(二)

2021-07-06 07:48:45 字數 3285 閱讀 9984

轉殖物件

php的物件是引用型別,變數名往往指代的是乙個指標,這點與js很相似,直接將$spot物件賦值給$al物件,這倆個物件指向的記憶體中的同乙個物件,所以改變乙個另外乙個也會受到影響,但是php4中卻不是這樣的。

class

dog}

$sopt = new dog("haha");

$al = $sopt;

$al->name = "wangwang";

echo

$sopt->name; // wangwang

在php4中$spot中的成員變數並不會被改變,php5中的這樣非常像js。php中有乙個clone關鍵字,這個關鍵字可以為物件新開闢記憶體,使之成為倆個不同的物件。

class

dog}

$sopt = new dog("haha");

$al = clone

$sopt;

$al->name = "wangwang";

echo

$sopt->name; // haha

比較物件

inte***ce

ianimal{};

class

dogimplements

ianimal

}$sopt = new dog("haha");

$al = clone

$sopt;

// 物件比較

// "=="號表示物件值相等,"==="表示物件值相等,位址也相等這點與js非常不同啊,js中的倆個不同物件永遠不可以相等啊,因為位址不同啊

var_dump($al == $sopt); // true

var_dump($al === $sopt); // false

// php不能echo出來bool值啊

// 物件檢測 instanceof,這個和js的作用是一樣的

// intanceof可以檢測當前物件是屬於哪個類

var_dump($al

instanceof dog); // true

var_dump($al

instanceof ianimal); // true

魔術方法

__clone()在呼叫clone時會呼叫的方法

class

dog

function

__clone

() }

$dog = new dog("haha");

$al = clone

$dog;

__set()寫入不存在或者不可見得成員變數時,php會執行__set()方法倆個引數,變數名稱和變數值;

__get()在讀取不存在或者不可見得成員變數時,php會執行__get()__get()有乙個引數,引數就是需要讀取的變數名;

class

student

public

function

__set

($age,$value)

public

function

__get

($type)

}$stu = new student("zp");

$stu->age = 19;

echo

$stu->name;

echo

$stu->age;

echo

$stu->job; // 呼叫可見的public成員變數時,並不會呼叫__get

__call()方法,呼叫不存在或者不可見得成員方法時,php會先呼叫,__call()方法來儲存方法名及其引數,__call()方法有倆個引數,即為方法麼和方法引數,方法引數以陣列存在

class

student

private

function

getname

($name)

public

function

__call

($foo,$arg)

}$stu = new student("zp");

echo

$stu->getname('haha');

__tostring()方法,echo物件時將呼叫這個方法,並且這個方法必須,返回乙個字串

class

student

public

function

__tostring

() }

$stu = new student('zp');

echo

$stu;

__sleep在物件序列化時會呼叫,__wakeup在物件反序列化時會呼叫

class

student

public

function

__sleep

() public

function

__wakeup

() }

$obj = new student('zp',19);

var_dump(serialize($obj));

var_dump(unserialize($obj));

__autoload可以呼叫自動例項化需要使用的類

我在同一目錄下,建立了乙個檔案,這個檔案內就是乙個test類,檔名為test.class.php

class

test

public

function

__tostring

()

}

在另外乙個php中利用__autoload來自動例項化需要的test類

function

__autoload

($class_name) else

}$test = new test("這是乙個測試啊");

echo

$test;

PHP物件導向(二)

怎麼樣使用物件中的成員 php物件中的成員有兩種一種是成員屬性,一種是成員方法。物件中的成員就要使用乙個特殊的操作符 來完成物件成員的訪問 例如 物件 屬性 p1 name p2 age p3 物件 方法 p1 say p2 run 注釋 從上例中可以看出只要是物件裡面的成員就要使用物件 屬性 物件...

php物件導向二

靜態的成員包括 靜態屬性和靜態方法 用static修飾的屬性和方法都是靜態的 訪問靜態成員,必須使用self關鍵字和 操作符 靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區,該 區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 直到整個程式執行結束。靜態成...

PHP物件導向(二)

parent 關鍵字 用在子類中 訪問父類的方法或屬性 用法 parent 屬性或方法或父類名字 屬性或方法 多次呼叫 只能例項化同乙個物件 不會重複 所謂的靜態 就是只屬於這個類的屬性和方法 類中的屬性名和方法名 用static 寫法 static 屬性名 static function 使用 類...