|
PHP變量用于存儲(chǔ)字符、數(shù)字、數(shù)組甚至對(duì)象內(nèi)容等,以便在我們需要的地方使用。 定義一個(gè)變量的語法: $變量名 = 值; 使用變量的例子: 代碼如下 復(fù)制代碼 <?php $var_char = "你好~"; echo $var_char; ?> 執(zhí)行這段代碼輸出的結(jié)果是: 1 你好~ 從這個(gè)例子可以看出,變量名以 $ 開始,標(biāo)明這是一個(gè)變量。變量名以字母(a-z、A-Z)或者下劃線 _ 開始,后面可以跟任意字母或數(shù)字以及下劃線,但不能是空格。 如下這些變量名是有效的: $var_char $varChar $_varChar $var_char5 提示 關(guān)于變量命名,我們建議變量名以標(biāo)明其實(shí)際語意的組合為佳,如 $my_name 或 $myName 格式。 全局變量global 全局變量便是其中之一,當(dāng)然這個(gè)觀點(diǎn)頗具爭(zhēng)議,有許多人還是建議禁用全局變量,使用不當(dāng)對(duì)造成程序的可讀性很差!結(jié)構(gòu)混亂,調(diào)試更是一頭霧水,但是不可否認(rèn)他的便捷,這便是php為什么會(huì)用全局變量global原因吧!? 今天就遇到了php 全局變量不起作用的問題. 先上一段簡(jiǎn)單的代碼: 代碼如下 復(fù)制代碼 <?php $a = 0 ; function Test() { $a =1; } Test(); echo $a; ?> 上面的代碼中輸出是0,那是因?yàn)楹瘮?shù)體Test內(nèi)$a變量被缺省設(shè)置為局部變量,$a的作用域就是在Test內(nèi).修改代碼如下 代碼如下 復(fù)制代碼 <?php $a = 0 ; function Test() { global $a;//申明函數(shù)體Test內(nèi)使用的$a變量為global全局變量 $a =1; } Test(); echo $a; ?> 申明函數(shù)體Test內(nèi)使用的$a變量為global全局變量后,使得$a的作用全局,所以輸出為1. 上面的實(shí)例只是基本的global全局變量知識(shí),下面我們看看復(fù)雜點(diǎn)的: 代碼如下 復(fù)制代碼 //A.php 文件 <?php function Test_Global() { include 'B.php'; Test(); } $a = 0 ; Test_Global(); echo $a; ?> //B.php 文件 <?php function Test() { global $a;//申明函數(shù)體Sum內(nèi)使用的$a變量為global全局變量 $a =1; } ?> 為什么輸出的卻是0? 在用戶自定義函數(shù)中,一個(gè)局部函數(shù)范圍將被引入。任何用于函數(shù)內(nèi)部的變量按缺省情況將被限制在局部函數(shù)范圍內(nèi)(包括include 和 require 導(dǎo)入的文件內(nèi)的變量)! 解釋:A.php文件的內(nèi)Test_Global是定義好的第三方函數(shù),該函數(shù)用include導(dǎo)入了B.php文件內(nèi)的$a的global全局變量,所以$a被限制在Test_Global局部函數(shù)范圍內(nèi),所以B.php文件內(nèi)的$a的作用范圍都在Test_Global內(nèi),而不是作用了整個(gè)A.php內(nèi). 解決方案: 1. 沖出局部函數(shù)//A.php 文件 代碼如下 復(fù)制代碼 <?php function Test_Global() { Test(); } include 'B.php'; //將include 從局部Test_Global函數(shù)中移出 $a = 0 ; Test_Global(); echo $a; ?> //B.php 文件 <?php function Test() { global $a; $a =1; } ?> 2.優(yōu)秀的訪問器 代碼如下 復(fù)制代碼 //A.php 文件 <?php include 'B.php'; $a =0; Set_Global($a); echo $a; ?> //B.php 文件 <?php function Set_Global(&$var) { $var=1; } ?> php變量 引用函數(shù) static變量無論怎樣聲明變量(按值或按引用),總之在PHP腳本的任何位置都可以聲明變量。但是,聲明的位置會(huì)大大影響訪問變量的范圍。這個(gè)可訪問的范圍稱為作用域(scope)” –PHP與MySQL程序設(shè)計(jì)在了解php變量之前,我們先看看段式內(nèi)存管理架構(gòu)的內(nèi)存段的劃分。通常操作系統(tǒng)會(huì)將物理內(nèi)存劃分為以下幾個(gè)邏輯段。 Text-Segment,這個(gè)段最大的特點(diǎn)就是只讀。一般存放可執(zhí)行代碼,也有可能常量也存放在這里,比如字符串常量 BSS-Segment,這里存放了那些沒有初始化的變量。某種意義來講,沒有初始化的變量都是垃圾,不可用 Data-Segment,這里存放了全局變量和靜態(tài)變量,直到腳本運(yùn)行結(jié)束,操作系統(tǒng)才會(huì)回收這里的內(nèi)存空間,變量亦會(huì)被銷毀。 Stack-Heap Segment 函數(shù)參數(shù)與本地變量(也稱局部變量)存放在堆中(stack),還有返回值等等。用完了,操作系統(tǒng)就會(huì)回收這部分內(nèi)存空間。對(duì)于C程序員而言,可以自行從棧中(heap)申請(qǐng)內(nèi)存空間,用完了,也需要自己手動(dòng)釋放。 作為PHP程序言而言,我們關(guān)心的是全局變量、靜態(tài)變量、局部變量、函數(shù)參數(shù)以及函數(shù)返回值。局部變量和函數(shù)參數(shù)基本上一樣,在初始化的時(shí)候分配內(nèi)存空間,退出函數(shù)后操作系統(tǒng)會(huì)回收內(nèi)存空間。而全局變量與靜態(tài)變量要直php腳本運(yùn)行結(jié)束后,內(nèi)存空間才會(huì)被釋放。與全局變量不同的時(shí),所有靜態(tài)變量在程序執(zhí)行之前就初始化并且分配了內(nèi)存空間。 注: 1.函數(shù)外部聲明靜態(tài)變量意義不大,函數(shù)內(nèi)部聲明靜態(tài)變量受限于作用域,函數(shù)外部不能修改函數(shù)內(nèi)部靜態(tài)變量。 2.引用變量,也是變量,只不過它的值是變量的內(nèi)存地址。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|