PHP內(nèi)核探索 —— 變量概述:變量在PHP的內(nèi)部如何實(shí)現(xiàn)
現(xiàn)代編程語(yǔ)言中的基本元素主要有:變量,流程控制接口,函數(shù)等等。我能否不使用變量來(lái)編寫(xiě)程序呢? 這顯然是可以的,例如:
<?phpecho 'Hello World';?>
這個(gè)程序很簡(jiǎn)單,輸出一個(gè)字符串內(nèi)容。
就和我們僅僅使用二進(jìn)制也能編程一樣,不使用變量也能完成大部分的工作,不使用變量我們的程序?qū)适O大的靈活性, 變量可以讓我們將值存儲(chǔ)起來(lái),以便在程序的其他地方使用,或者通過(guò)計(jì)算保存新的值。 變量具有三個(gè)基本特性:
名稱(chēng)。變量的標(biāo)示符。就像小狗一樣,主人可能會(huì)給這些小狗起個(gè)喜歡的名稱(chēng)。 變量命名上,PHP繼承了Perl的語(yǔ)法風(fēng)格,變量以美元符號(hào)開(kāi)始,后面跟變量名。 一個(gè)有效的變量名由字母或者下劃線開(kāi)頭,后面跟上任意數(shù)量的字母,數(shù)字,或者下劃線。 PHP同時(shí)還支持復(fù)合變量,也就是類(lèi)似$$a的變量,它會(huì)進(jìn)行兩次的解釋。這給PHP帶來(lái)了非常靈活的動(dòng)態(tài)特性。類(lèi)型。變量的類(lèi)型,就像小狗的品種,不同的小狗血統(tǒng)可能會(huì)不一樣,有的聰明, 有的會(huì)購(gòu)物等等。 在很多靜態(tài)語(yǔ)言中,變量在定義時(shí)就指定了,在程序運(yùn)行過(guò)程中都不允許進(jìn)行變更, 那如果你有一只能隨便指定品種的小狗會(huì)不會(huì)很拉風(fēng)呢;-) PHP就是這樣,屬于弱類(lèi)型語(yǔ)言,可以隨便賦予它任何類(lèi)型的值。值內(nèi)容。 這是標(biāo)示所代表的具體內(nèi)容。這就像是實(shí)實(shí)在在的小狗的這個(gè)實(shí)物。 你可以給任何一條小狗起名為:小七,在編程語(yǔ)言中也是如此,你可以給變量賦予它 所能表示范圍的值。不過(guò)在同一時(shí)間,變量只能有一個(gè)值。PHP中組成變量名的字母可以是英文字母 a-z,A-Z,還可以是 ASCII 字符從 127 到 255(0x7f-0xff)。 變量名是區(qū)分大小寫(xiě)的。
除了變量本身,在PHP中我們經(jīng)常會(huì)接觸到與變量相關(guān)的一些概念,比如:常量,全局變量,靜態(tài)變量以及類(lèi)型轉(zhuǎn)換等。 本章我們將介紹這些與變量相關(guān)的實(shí)現(xiàn)。其中包括PHP本身的變量低層存儲(chǔ)結(jié)構(gòu)以及弱類(lèi)型系統(tǒng)的實(shí)現(xiàn), 以及這些類(lèi)型之間的相互轉(zhuǎn)換等。
先看一段PHP代碼:
<?php$foo = 10;$bar = 20;function change() { global $foo; $bar = 0; $foo++;}change();echo $foo, ’ ’, $bar;?>
運(yùn)行代碼會(huì)輸出11 20。
可是為什么會(huì)有這樣的輸出呢?變量在PHP的內(nèi)部是如何實(shí)現(xiàn)的呢? 變量的作用域又是怎么實(shí)現(xiàn)的呢? 這是本章將對(duì)圍繞變量這個(gè)主題展開(kāi)討論,下面我們從最基本的變量實(shí)現(xiàn)開(kāi)始。
不是所有編程語(yǔ)言中的變量的值都可以改變的。想想我們學(xué)過(guò)的數(shù)學(xué)中的變量。 他們的值也是不可改變的。例如: x + y = 10; 變量x和y的值是不能發(fā)生變化的。 在某個(gè)具體場(chǎng)景,也就是某個(gè)方程式中只有表示特定的值,變量的值不能改變的好處是: 這樣就能盡可能少的產(chǎn)生副作用, 在Erlang語(yǔ)言中就是如此,它是一門(mén)函數(shù)式編程語(yǔ)言,非常值得學(xué)習(xí)。
相關(guān)文章:
1. Android table布局開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器2. 理解PHP5中static和const關(guān)鍵字3. jQuery 實(shí)現(xiàn)DOM元素拖拽交換位置的實(shí)例代碼4. php模擬實(shí)現(xiàn)斗地主發(fā)牌5. IntelliJ IDEA安裝插件的方法步驟6. phpstorm恢復(fù)默認(rèn)設(shè)置的方法步驟7. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)8. Python random庫(kù)使用方法及異常處理方案9. Vuex localStorage的具體使用10. .Net Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟

網(wǎng)公網(wǎng)安備