PHP物件導向之&引用
中,可以引用的有變數,函式,物件。引用符號統一用&。
引用,實際上就是用不同的名字訪問同一個變數內容。引用不是指標,不指向實際的記憶體。
PHP中的引用並不是通常意義的引用,並不是指標,就行PHP中的過載並不是真正的過載一樣!!!
連結:
1.變數引用
指多個變數名指向同一個變數,每次改動都影響其他指向此位置的變數。
$a = 3;
$b = & $a; //此時$b和$a指向同一塊記憶體
$b = 4; //對$b的重新賦值,也會影響$a
echo $a; //$a值變為4
變數引用的一個常見用法是引用傳遞,將實參的引用傳到方法中,從而實現在方法中改變原資料。
注意在函式呼叫時沒有引用符號——只有函式定義中有。
$a = 3;
f($a); //此時只能傳變數名,如果傳整形或字串等資料,會報錯
function f(& $param) { //此處取了實參的引用
$param++;
}
echo $a; //$a值變為4
2.函式的引用返回
當函式有返回值時,可以透過函式引用的形式,在函式外部更改函式的返回值。可以認為是將函式返回值所佔用的記憶體引用傳遞給函式外部的變數,使兩個變數表示同一塊記憶體。
函式的引用返回,就是將函式的返回值當做引用。
function & f() { //方法定義時,方法名前加&表示該方法可以被引用
static $a = 3;
echo $a++;
return $a;
}
$b = &f(); //引用該函式,並將函式返回值和$b指向同一個變數
echo $b;
$b = $b + 100; //此時同時改變函式返回值$a
f(); //本行列印104
上例列印出:34104
$a = f();
改變$a
並不會影響函式f()
的返回值,但是$a = &f();
在改變$a
時同時影響函式f()
的返回值。
3.物件引用
PHP中,物件的複製預設就是透過引用傳遞來實現,$o2 = $o1
執行時,實際就是將$o1
的引用複製給$o2
,兩個物件實際上是同一個。
物件複製
參考:
如果我們想建立物件的副本,需要使用clone關鍵字(這將呼叫物件的 __clone()
方法)。物件中的 __clone()
方法不能被直接呼叫。
//兩種寫法都可以
$copy_of_object = clone $object;
$copy_of_object = clone($object);
當用 clone 複製物件後,PHP 5 會對物件的所有屬性執行一個淺複製(shallow copy)。所有的基本屬性會複製到新的儲存空間,但是引用屬性仍然會是一個指向原來的變數的引用。可以在要複製的物件中自定義 __clone()
方法,複製物件完成後會自動呼叫 __clone()
方法,可用於修改屬性的值。
php
class SubObject
{
static $instances = 0;
public $instance;
public function __construct() {
$this->instance = ++self::$instances;
}
public function __clone() {
$this->instance = ++self::$instances;
}
}
class MyCloneable
{
public $object1;
public $object2;
function __clone()
{
// 強制複製一份this->object, 否則仍然指向同一個物件
$this->object1 = clone $this->object1;
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print();
print_r($obj);
print();
print_r($obj2);
?>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2804570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- PHP物件導向PHP物件
- PHP基礎之物件導向篇PHP物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- PHP基礎之物件導向講解PHP物件
- 【物件導向的PHP】之模式:目錄物件PHP模式
- PHP物件導向(三)PHP物件
- php中的程式導向與物件導向PHP物件
- PHP 物件導向 (十)TraitsPHP物件AI
- PHP 核心技術 --物件導向PHP物件
- PHP 物件導向基礎概念PHP物件
- PHP 物件導向 (十一)反射類PHP物件反射
- PHP學習4——物件導向PHP物件
- PHP面試常考內容之物件導向(3)PHP面試物件
- 物件導向-物件導向思想物件
- php基礎語法_物件導向PHP物件
- PHP MySQL (三)物件導向 事務PHPMySql物件
- PHP 物件導向 (二)類屬性PHP物件
- PHP 物件導向 (五)靜態方法PHP物件
- PHP 物件導向 (六)魔術方法PHP物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- 二、Java之物件導向Java物件
- 【讀】JavaScript之物件導向JavaScript物件
- 物件導向之繼承物件繼承
- 《JavaScript物件導向精要》之六:物件模式JavaScript物件模式
- PHP 物件導向 (三)名稱空間PHP物件
- PHP中物件導向的分頁類PHP物件
- 淺談PHP物件導向程式設計PHP物件程式設計
- 深入理解PHP物件導向之後期靜態繫結PHP物件
- Python基礎之物件導向Python物件
- Golang 基礎之物件導向Golang物件
- Go 筆記之物件導向Go筆記物件
- 物件導向之內部類物件
- 物件導向之封裝(Java)物件封裝Java
- Python物件導向之九:反射Python物件反射
- python之成員(物件導向)Python物件
- 物件導向之_繼承概念物件繼承
- python---之物件導向selfPython物件