中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

PHP中弱引用的示例分析

發布時間:2021-05-11 13:54:19 來源:億速云 閱讀:158 作者:小新 欄目:編程語言

這篇文章主要介紹PHP中弱引用的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

php的框架有哪些

php的框架:1、Laravel,Laravel是一款免費并且開源的PHP應用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準備的PHP框架。4、Yii,Yii是一款快速、安全和專業的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強大的PHP框架。

我們知道,PHP 中沒有純引用(指針),不管是對象,還是用引用符號 & 賦值的變量,都是對一個符號表的引用。而今天,我們要學習的是另一種引用形式:弱引用。

什么是弱引用

弱引用允許程序員保留對對象的引用,而該對象不會阻止對象被銷毀;它們對于實現類似緩存的結構非常有用。

這是比較官方的解釋。從這個說明中,我們可以看出,弱引用也是一種引用形式,但是,如果我們銷毀了原來的對象,那么弱引用對象也會被銷毀,就像普通的值對象賦值一樣。

WeakReference

$obj = new stdClass;
$weakref = $obj;

var_dump($weakref);
// object(stdClass)#1 (0) {
// }

unset($obj);
var_dump($weakref);
// object(stdClass)#1 (0) {
// }

$obj1 = new stdClass;
$weakref = WeakReference::create($obj1);

var_dump($weakref->get());
// object(stdClass)#2 (0) {
// }

unset($obj1);
var_dump($weakref->get());
// NULL

$weakref = WeakReference::create(new stdClass);
var_dump($weakref->get());
// NULL

第一個對象 \$obj 我們進行直接的賦值引用,也就是 PHP 默認的對象賦值。這時候,$weakref 保存的是對象符號表的引用。當我們 unset() 掉 $obj 時,$weakref 依然能夠正常使用。也就是說,$weakref 對 $obj 原始對象的內存引用依然保持著。不管我們怎么 unset() 原始的 $obj ,都只是切斷了 $obj 的引用符號表,對真正的對象沒有影響,垃圾回收器也不會徹底的回收最最原始的 $obj 對象內容。

第二個對象我們使用的是 WeakReference 的 create() 方法來創建的弱引用,當我們銷毀 $obj1 后,$weakref 也會變成 NULL 。這就是弱引用的作用!

它可以讓垃圾回收器正常的回收,它可以避免循環引用帶來的內存泄漏問題,它能讓引用表現為類似于 C 中的指針操作一樣。

最后一段代碼是我們通過 WeakReference::create() 中直接使用 new 來創建對象。這種形式是不行的,會一直返回 NULL 。因為弱引用是通過變量來創建的,它指向的是原始對象的符號表,而變量和對象之間的符號表連接才是弱引用關心的內容,它會根據符號表的狀態來判斷當前的狀態。如果原始對象變量切斷了與符號表的連接,那么弱引用的變量也會同步切斷,這樣,垃圾回收器就能正常的清理這個已經沒有任何引用計數的對象了。

注意

這里需要注意的是,上面的測試代碼必須在 PHP7.4 及以上版本才有用,WeakReference 類是 PHP7.4 新增加的內容。之前的版本需要安裝 WeakRef 這個擴展才能實現弱引用的能力,具體的內容可以查閱下方鏈接中的相關的文檔。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%AD%A6%E4%B9%A0PHP%E5%BC%B1%E5%BC%95%E7%94%A8%E7%9A%84%E7%9F%A5%E8%AF%86.php

以上是“PHP中弱引用的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

php
AI

奎屯市| 汾西县| 南充市| 诏安县| 应用必备| 沁阳市| 庆云县| 温州市| 达拉特旗| 微博| 衢州市| 红河县| 西青区| 南涧| 新绛县| 望江县| 碌曲县| 清苑县| 额尔古纳市| 得荣县| 镇赉县| 乐陵市| 巴中市| 丹凤县| 城步| 葫芦岛市| 正蓝旗| 宜良县| 民县| 广昌县| 东至县| 溧水县| 镇雄县| 彰武县| 湟源县| 蕉岭县| 根河市| 大厂| 谢通门县| 焦作市| 霍邱县|