成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP中作用域的實(shí)現(xiàn)原理

kviccn / 2229人閱讀

摘要:每種程序語(yǔ)言都有自己的作用域?qū)崿F(xiàn),的作用域是怎么實(shí)現(xiàn)的呢先看一段代碼。那在底層是怎么實(shí)現(xiàn)這樣的效果的引擎本身有結(jié)構(gòu),該結(jié)構(gòu)中的是全局符號(hào)表,其中保存了頂層作用域的變量也就是全局變量。那局部變量呢其實(shí)每個(gè)函數(shù)都有一個(gè)自己的符號(hào)表。

每種程序語(yǔ)言都有自己的作用域?qū)崿F(xiàn),php的作用域是怎么實(shí)現(xiàn)的呢?
先看一段php代碼。

$bar = "out";

function scope(){
    $bar = "inner";
    echo $bar."<
>";
}

scope();

這段代碼的輸出很簡(jiǎn)單:

root@forse:~/learn$ php a.php 
inner

為什么會(huì)是這樣的輸出,我相信只要稍微懂點(diǎn)php或者編程的人就明白。那在php底層是怎么實(shí)現(xiàn)這樣的效果的?
Zend引擎本身有_zend_executor_globals結(jié)構(gòu),該結(jié)構(gòu)中的symptom_table是全局符號(hào)表,其中保存了頂層作用域的變量也就是全局變量。但程序需要使用全局變量的時(shí)候舊在這個(gè)符號(hào)表中遍歷。
那局部變量呢?其實(shí)每個(gè)函數(shù)都有一個(gè)自己的符號(hào)表activity_symptom_table。每個(gè)函數(shù)的符號(hào)表都是相互獨(dú)立的。
在php中,執(zhí)行環(huán)境是在_zend_execute_data中,在執(zhí)行某個(gè)函數(shù)時(shí),全局中的_zend_executor_globals中的activity_symptom_table指向當(dāng)前的_zend_execte_data中的symptom_table,以后所有函數(shù)執(zhí)行過(guò)程中的變量修改都是在新的symptom_table中修改,不會(huì)影響全局的變量,也讀不到全局的變量,但函數(shù)執(zhí)行完成后,php在將原來(lái)的execute_data恢復(fù),恢復(fù)到全局變量,這樣就實(shí)現(xiàn)了全局變量和局部變量的互換。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31882.html

相關(guān)文章

  • 2018年騰訊前端一面總結(jié)(面向2019屆學(xué)生)

    摘要:前言騰訊一面,相比阿里一面來(lái)說(shuō),騰訊一面先給打電話預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。其實(shí)閉包也就是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的函數(shù)而已。常用的創(chuàng)建閉包的方法就是在函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。 前言 騰訊一面,相比阿里一面來(lái)說(shuō),騰訊一面先給打電話預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。但是也正是因?yàn)檫@種確定性,也有在等待電話的時(shí)候的心情的忐忑。 背景 我是一名大三學(xué)生,大一...

    Kosmos 評(píng)論0 收藏0
  • php底層原理之變量(一)

    摘要:對(duì)于來(lái)說(shuō),變量有全局變量和局部變量之分那么,他們都是存儲(chǔ)到一個(gè)哈希表內(nèi)了么其實(shí)不是的,變量存儲(chǔ)也有作用域的概念。 上次跟大家講了垃圾回收機(jī)制后,有些小伙伴對(duì)底層原理比較感興趣,私信問(wèn)我了一些關(guān)于變量的相關(guān)知識(shí),既然大家對(duì)變量比較感興趣,那么這次我們來(lái)系統(tǒng)的講一下變量的底層原理 變量結(jié)構(gòu) 首先,我們還是先擺上我們的zval結(jié)構(gòu)體,即php所有變量都會(huì)以zval結(jié)構(gòu)體的形式實(shí)現(xiàn) struc...

    curlyCheng 評(píng)論0 收藏0
  • PHP筆試面試題精選(一)

    摘要:,跨站腳本攻擊。實(shí)際發(fā)的請(qǐng)求就是,用于表示這是一個(gè)請(qǐng)求。,用于告知服務(wù)器根據(jù)這個(gè)參數(shù)獲取回調(diào)函數(shù)的名稱,通常約定就叫。,回調(diào)函數(shù)的名稱,也是前面參數(shù)的值,可省略,會(huì)自動(dòng)生成。 本次課程主要圍繞 PHP 面試和筆試中經(jīng)常會(huì)出現(xiàn)的一些知識(shí)點(diǎn),但是面試官會(huì)在筆試題基礎(chǔ)上深入擴(kuò)展,那么你知道如何更好的回答讓面試官滿意嗎?題目收集自騰訊,迅雷,美圖等公司的筆試面試題,以及本人面試經(jīng)歷中印象中的知...

    JohnLui 評(píng)論0 收藏0
  • 前端進(jìn)擊的巨人(三):從作用域走進(jìn)閉包

    摘要:進(jìn)擊的巨人第三篇,本篇就作用域作用域鏈閉包等知識(shí)點(diǎn),一一擊破。在此我們遵照的方式,暫且稱是閉包。所以,一名合格的前端,除了會(huì)用閉包,還要正確的解除閉包引用。 進(jìn)擊的巨人第三篇,本篇就作用域、作用域鏈、閉包等知識(shí)點(diǎn),一一擊破。 showImg(https://segmentfault.com/img/bVburWd?w=1280&h=854); 作用域 作用域:負(fù)責(zé)收集并維護(hù)由所有聲明的...

    Vicky 評(píng)論0 收藏0
  • jsonp 跨域原理分析

    摘要:為請(qǐng)求指定一個(gè)回調(diào)函數(shù)名。這主要用來(lái)讓生成一個(gè)獨(dú)特的函數(shù)名,這樣管理請(qǐng)求更容易,也能方便地提供回調(diào)函數(shù)和錯(cuò)誤處理。在回調(diào)函數(shù)中,通常我們只需通過(guò)判斷請(qǐng)求是否完成,如果已完成,再根據(jù)判斷是否是一個(gè)成功的響應(yīng)。 本篇文章借鑒自 博客園文章 原文地址 AJAX即Asynchronous Javascript And XML(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的...

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

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

0條評(píng)論

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