国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP中對(duì)象的引用傳遞

Freeman / 2383人閱讀

摘要:相反,使用了另一種方式將指向同一個(gè)對(duì)象,稱其為引用。如果對(duì)象是完全相同的,但存儲(chǔ)在不同的位置,將返回。對(duì)象總是通過引用傳遞。流暢的接口對(duì)象總是通過引用傳遞,這表明無需從一個(gè)方法中返回一個(gè)對(duì)象來觀察它的變化。

很多數(shù)據(jù)類型都可以寫時(shí)復(fù)制(copy-on-write),如$a=$b,兩個(gè)變量賦予的值相等。
對(duì)于對(duì)象就不一樣:

$box1 = new Parcel();
$box1->destinationCountry = "Denmark";

$box2 = $box1;
$box2->destinationCountry = "Brazil";

echo "Parcels need to ship to:" . $box1->destinationCountry . " and " . $box2->destinationCountry;
//打印結(jié)果 
//Parcels need to ship to: Brazil and Brazil

現(xiàn)在的情況是,當(dāng)將$box1賦值給$box2時(shí),并沒有復(fù)制$box1的值。相反,PHP使用了另一種方式將$box2指向同一個(gè)對(duì)象,稱其為引用(reference)
通過使用==操作符來比較兩個(gè)對(duì)象,可以知道它們是否具有相同的類和屬性。

if($box1 == $box2) echo "equivalent";

還可以更進(jìn)一步區(qū)分它們是否引用同一個(gè)原始對(duì)象,可用同樣的方式===操作符進(jìn)行比較:

if($box1 === $box2) echo "exact same object!";

當(dāng)兩個(gè)變量指向相同的值時(shí),===比較操作符才會(huì)返回true。如果對(duì)象是完全相同的,但存儲(chǔ)在不同的位置,將返回false。

對(duì)象總是通過引用傳遞。即當(dāng)傳遞一個(gè)對(duì)象到一個(gè)函數(shù)中,這個(gè)函數(shù)會(huì)作用于相同的對(duì)象,如果這個(gè)對(duì)象在函數(shù)內(nèi)部發(fā)生變化,這種變化會(huì)反映到函數(shù)外部。這是將一個(gè)對(duì)象賦值給一個(gè)新變量的行為延伸。
對(duì)象總是以這樣的方式表現(xiàn),即它們提供一個(gè)對(duì)原始對(duì)象的引用,而不是創(chuàng)建自己的一個(gè)副本。

$courier = new PigeonPost("Avian Delivery Ltd");

$other_courier = $courier;
$other_courier->name = "Pigeon Post";

echo $courier->name; // outputs "Pigeon Post"

對(duì)象會(huì)提供一個(gè)指向自己的引用,而不是復(fù)制自己的一個(gè)副本。這意味著如果一個(gè)函數(shù)對(duì)傳入的一個(gè)對(duì)象進(jìn)行操作時(shí),沒有必要從函數(shù)中返回。這種變化會(huì)在對(duì)象的原始副本上反映出來。

如果需要為一個(gè)已經(jīng)存在的對(duì)象復(fù)制一個(gè)多帶帶的副本,可以使用clone這個(gè)關(guān)鍵字來創(chuàng)建。

$courier = new PigeonPost("Avian Delivery Ltd");

$other_courier = clone $courier;
$other_courier->name = "Pigeon Post";

echo $courier->name; // outputs "Avian Delivery Ltd"

當(dāng)復(fù)制一個(gè)對(duì)象時(shí),存儲(chǔ)在其屬性中的任何對(duì)象都將是引用而不是副本。
PHP有一個(gè)神奇的方法,即如果聲明了一個(gè)對(duì)象,當(dāng)復(fù)制這個(gè)對(duì)象時(shí),會(huì)調(diào)用這個(gè)對(duì)象,這就是_clone()方法,你可以聲明而且以此來決定當(dāng)復(fù)制對(duì)象時(shí)會(huì)做什么,甚至不接受復(fù)制

流暢的接口
對(duì)象總是通過引用傳遞,這表明無需從一個(gè)方法中返回一個(gè)對(duì)象來觀察它的變化。然而,如果從一個(gè)方法中返回$this,可以在應(yīng)用程序內(nèi)建立一個(gè)流暢的接口(fluent interface),可讓你將方法鏈接在一起。其工作原理如下:
1.創(chuàng)建對(duì)象
2.調(diào)用對(duì)象的方法
3.得到從方法中返回的修正對(duì)象
4.選擇返回步驟2

class Parcel
{
    protected $weight;
    protected $destinationCountry;
    
    public function setWeight($weight) {
        echo "weight set to: " . $weight . "
";
        $this->weight = $weight;
        return $this;
    }
    
    public function setCountry($country) {
        echo "destination country is: " . $country . "
";
        $this->destinationCountry = $country;
        return $this;
    }
} 

$myParcel = new Parcel;
$myParcel->setWeight(5)->setCountry("Peru");

這里的關(guān)鍵是可以在一行代碼中調(diào)用多個(gè)方法(可以加一些換行符以增加代碼的可讀性),并可按任意順序調(diào)用。由于每個(gè)方法都返回生成的對(duì)象,因此可以通過返回對(duì)象再調(diào)用下一個(gè)方法。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28418.html

相關(guān)文章

  • PHP引用傳遞+unset+global理解,希望大神指正

    摘要:即產(chǎn)生了相當(dāng)于這樣的效果,所以改變的值也同時(shí)改變了的值。不要用返回引用來增加性能,引擎足夠聰明來自己進(jìn)行優(yōu)化。只能從函數(shù)返回引用變量沒別的方法。 關(guān)鍵是對(duì)global的誤解,之前以為在函數(shù)中g(shù)lobal變量,就是把函數(shù)外部的變量拿進(jìn)函數(shù)內(nèi)部使用,但似乎我錯(cuò)了引用傳遞+unset+global理解 php的引用(就是在變量、函數(shù)、對(duì)象等前面加上&符號(hào))在PHP中引用的意思是:不同的名字訪...

    ConardLi 評(píng)論0 收藏0
  • PHP對(duì)象是按引用傳遞

    摘要:在中使用對(duì)象的時(shí)候,我們總是被告知默認(rèn)情況下對(duì)象是按照引用傳遞的,其實(shí)這是個(gè)誤區(qū),不完全正確。我們從下面的示例來分析此時(shí)的關(guān)系此時(shí)的關(guān)系如果對(duì)象是按照引用傳遞的,那么輸出的內(nèi)容應(yīng)該一樣,事實(shí)上結(jié)果并非如此。 在PHP中使用對(duì)象的時(shí)候,我們總是被告知默認(rèn)情況下對(duì)象是按照引用傳遞的,其實(shí)這是個(gè)誤區(qū),不完全正確。PHP的對(duì)象變量存儲(chǔ)的是此對(duì)象的一個(gè)標(biāo)示符而不是對(duì)象值,通過此標(biāo)示符可以訪問真正...

    guyan0319 評(píng)論0 收藏0
  • 搞定PHP面試 - 深入了解引用

    摘要:引用可以被看作是文件系統(tǒng)中的硬鏈接。如果具有引用的數(shù)組被復(fù)制,其值不會(huì)解除引用。如果試圖這樣從函數(shù)返回引用,將會(huì)報(bào)錯(cuò),因?yàn)楹瘮?shù)在試圖返回一個(gè)表達(dá)式的結(jié)果而不是一個(gè)引用的變量。這并不意味著變量?jī)?nèi)容被銷毀了。 1. 什么是引用 在 PHP 中引用是指用不同的名字訪問同一個(gè)變量?jī)?nèi)容。PHP 中的變量名和變量?jī)?nèi)容是不一樣的, 因此同樣的內(nèi)容可以有不同的名字。最接近的比喻是 Unix 的文件名和...

    fox_soyoung 評(píng)論0 收藏0
  • 關(guān)于PHP5后“默認(rèn)情況下對(duì)象是通過引用傳遞”思考

    摘要:中的對(duì)象傳遞然后說一下之后的默認(rèn)情況下的對(duì)象是通過引用傳遞的這件事情。如此時(shí),其實(shí)表示的并不是是的引用,和可以說是沒什么關(guān)系的,有關(guān)系的是實(shí)例化類得到的對(duì)象。 首先引發(fā)這篇博文的是來源于這篇帖子:https://segmentfault.com/q/10... 經(jīng)過了思考之后,我決定把回答思考變成博客做一下記錄,如有不對(duì)之處,歡迎指正。 指針與引用 首先,引用和指針是不一樣的,指針在...

    hosition 評(píng)論0 收藏0
  • PHP 引用是個(gè)坑,請(qǐng)慎用

    摘要:發(fā)布時(shí)最大的變動(dòng)是對(duì)象處理方式。這很容易被誤解為引用,但是存儲(chǔ)器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會(huì)使性能下降這個(gè)事實(shí)外,使用引用這種方式會(huì)使得代碼難以維護(hù)。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會(huì)議,其中八次會(huì)議里我進(jìn)行了相關(guān)發(fā)言,...

    dockerclub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Freeman

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<