亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解PHP原理中的變量賦值

發布時間:2021-09-24 17:22:13 來源:億速云 閱讀:128 作者:柒染 欄目:開發技術

如何理解PHP原理中的變量賦值,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

PHP的變量賦值

這個標題估計很多人會不屑一顧,變量賦值?excuse me?我們學開發的第一課就會了好不好。但是,就是這樣基礎的東西,反而會讓很多人蒙圈,比如,值和引用的關系。今天,我們就來具體講講。

首先,定義變量和賦值這個不用多說了吧

$a = 1;

$b = '2';

$c = [4, 5, 6];

$d = new stdClass();

四個變量,分別定義了整型、字符串、數組的對象。這也是我們天天要打交道的四種類型。

然后,變量給變量賦值。

$a1 = $a;

$b1 = $b;

$c1 = $c;

$d1 = $d;

請注意,前三個的賦值都是正常的賦值,也就是對具體內容的拷貝。當我們修改$a1的時候$a不會有變化。$a1是新開的內存空間保存了我們的值。也就是說,他們的值是一樣的,但內存地址不一樣。是兩個沒啥關系的長得很像的人而已。

但是$d1和$d就不是了,這兩貨不僅值是一樣的,內存地址也是一樣的。這種情況就是我們所說的引用賦值。當$d1發生變化時,$d2也會產生變化。

可以這么說:引用賦值就是為原變量建立了一個Windows下的快捷方式或者Linux中的軟鏈接。

用具體的例子來說明,首先是普通值的賦值:

// 普通賦值

$v = '1';

$c = $v;

$c = '2';

echo $v, PHP_EOL; // '1'

// 數組也是普通賦值

$arr1 = [1,2,3];

$arr2 = $arr1;

$arr2[1] = 5;

print_r($arr1); // [1, 2, 3]

$c不會對$v的值產生影響。$arr2修改了下標1,也就是第二個數字為5,當然也不會對$arr1產生影響。

那么對象形式的引用賦值呢?

// 對象都是引用賦值

class A {

    public $name = '我是A';

}

$a = new A();

$b = $a;

echo $a->name, PHP_EOL; // '我是A'

echo $b->name, PHP_EOL; // '我是A'

$b->name = '我是B';

echo $a->name, PHP_EOL; // '我是B'

果然不出所料,$b修改了name屬性的內容后,$a里面的name也變成了$b所修改的內容。

在這種情況下,如果對象想要不是引用傳遞的,一是使用__clone(),也就是原型模式來進行自己的拷貝。二是從外面重新new一個唄。

// 使用克隆解決引用傳遞問題

class Child{

    public $name = '我是A1的下級';

}

class A1 {

    public $name = '我是A';

    public $child;

    function __construct(){

        $this->child = new Child();

    }

    function __clone(){

        $this->name = $this->name;

        // new 或者用Child的克隆都可以

        // $this->child = new Child();

        $this->child = clone $this->child;

    }

}

a1 = new A1();

echo $a1->name, PHP_EOL; // 輸出a1原始的內容

echo $a1->child->name, PHP_EOL;

$b1 = $a1;

echo $b1->name, PHP_EOL; // b1現在也是a1的內容

echo $b1->child->name, PHP_EOL;

$b1->name = '我是B1'; // b1修改內容

$b1->child->name = '我是B1的下級';

echo $a1->name, PHP_EOL; // a1變成b1的內容了

echo $a1->child->name, PHP_EOL;

// 使用__clone

$b2 = clone $b1; // b2克隆b1

$b2->name = '我是B2'; // b2修改內容

$b2->child->name = '我是B2的下級';

echo $b1->name, PHP_EOL; // b1不會變成b2修改的內容

echo $b1->child->name, PHP_EOL;

echo $b2->name, PHP_EOL; // b2修改的內容沒問題,b1、b2不是一個貨了

echo $b2->child->name, PHP_EOL;

對象的引用這一塊確實會容易讓人蒙圈。特別是更加復雜的對象,內部的屬性還有各種引用其他對象的時候。這種情況下一定要仔細確認引用賦值會不會帶來問題,如果有問題,就使用新對象或者克隆技術進行引用問題的處理。

最后,輕松一下,引用變量的賦值就和我們給方法傳引用參數一樣的,使用一個&符號就可以啦!

// 引用賦值

$b = &$v;

$b = '3';

echo $v, PHP_EOL;

今天我們更深入的學習和了解了一下PHP中的賦值問題,特別是普通賦值和引用賦值的問題。下回看代碼和框架的時候可以注意注意別人是怎么靈活使用這兩種賦值的哈,自己也能試試能不能運用這兩種方式改造下自己曾經寫過的BUG哦!

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

灯塔市| 黄石市| 汉源县| 鲁甸县| 奉节县| 类乌齐县| 平江县| 抚远县| 股票| 濮阳市| 庆城县| 通州市| 西充县| 玉树县| 泽州县| 蓬莱市| 永福县| 壤塘县| 小金县| 富宁县| 福贡县| 梁河县| 班玛县| 家居| 乌鲁木齐市| 阿拉尔市| 绥芬河市| 曲阳县| 甘德县| 绥宁县| 邹城市| 彭山县| 正蓝旗| 曲周县| 蒲江县| 会同县| 河北省| 平顺县| 甘谷县| 双柏县| 西吉县|