萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP變量詳解和定義變量名的方法

PHP變量詳解和定義變量名的方法

PHP變量和定義變量名在開發中我多次有介紹過昨天也分享了相關的文章,下面我們再來看看關於變量在php中農常用的一些方法。

1.定義常量define(“CONSTANT”, “Hello world.”);

常量只能包含標量數據(boolean,integer,float 和 string)。
調用常量時,只需要簡單的用名稱取得常量的值,而不能加“$”符號,如:echo CONSTANT;
注: 常量和(全局)變量在不同的名字空間中。這意味著例如 TRUE 和 $TRUE 是不同的。

2.普通變量$a = “hello”;


3.可變變量(使用兩個美元符號($))

$$a = “world”;
兩個變量都被定義了:
$a 的內容是“hello”並且 $hello 的內容是“world”。
因此,可以表述為:
echo “$a ${$a}”;或者 echo “$a $hello”;它們都會輸出:hello world
要將可變變量用於數組,必須解決一個模稜兩可的問題。這就是當寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變量呢,還是想要 $$a 作為一個變量並取出該變量中索引為 [1] 的值。解決此問題的語法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]。

4.靜態變量

在函數內部static $a = 0;
注意:聲明中用表達式的結果對其賦值會導致解析錯誤如static $a =3+3;(error)
靜態變量僅在局部函數域中存在(函數內部),函數執行完之後,變量值不會丟失,可用於遞歸調用

5.全局變量

在函數體內定義的global變量,函數體外可以使用,在函數體外定義的global變量不能在函數體內使用,在全局范圍內訪問變量可以用特殊的 PHP 自定義 $GLOBALS 數組:
如:$GLOBALS[“b”] = $GLOBALS[“a”] + $GLOBALS[“b”];
在一個函數域內用 global 語句導入的一個真正的全局變量實際上是建立了一個到全局變量的引用
global $obj;
注:對於變量的 static 和 global 定義是以 應用 的方式實現的

6.給變量賦值:傳地址賦值(簡單引用):

$bar = &$foo; //加&符號到將要賦值的變量前
改動新的變量將影響到原始變量,這種賦值操作更加快速
注意:只有命名變量才可以傳地址賦值
注意:如果
$bar = &$a;
$bar = &$foo;

改變$bar的值只能改變變量foo的值,而不改變a的值(引用改變了)

7.PHP 超全局變量$GLOBALS :

包含一個引用指向每個當前腳本的全局范圍內有效的變量。該數組的鍵標為全局變量的 名稱。從 PHP 3 開始存在 $GLOBALS 數組。
$_SERVER : 變量由 Web 服務器設定或者直接與當前腳本的執行環境相關聯。類似於舊數組 $HTTP_SERVER_VARS 數組(依然有效,但反對使用)。
$_GET : 經由 HTTP GET 方法提交至腳本的變量。
$_POST : 經由 HTTP POST 方法提交至腳本的變量。
$_COOKIE : 經由 HTTP Cookies 方法提交至腳本的變量。
$_FILES : 經由 HTTP POST 文件上傳而提交至腳本的變量。
文件上傳表單中要有 enctype=”multipart/form-data”
$_ENV : 執行環境提交至腳本的變量。
$_REQUEST :經由 GET,POST 和 COOKIE 機制提交至腳本的變量,因此該數組並不值得信任。所有包含在該數組中的變量的存在與否以及變量的順序均按照 php.ini 中的 variables_order 配置指示來定義。該數組沒有直接模擬 PHP 4.1.0 的早期版本。參見 import_request_variables()。
注意: 自 PHP 4.3.0 起,$_FILES 中的文件信息不再存在於 $_REQUEST 中。
$_SESSION :當前注冊給腳本會話的變量。
如何禁用phpinfo():
php.ini中
disable_functions = phpinfo()
重啟web服務器。
php中的常量
常量只能用define(常量名,常量值);
常量只能包含標量數據(boolean,integer,float 和 string)。
可以簡單的通過指定其名字來取得常量的值,不要在常量前面加上 $ 符號。如果常量名是動態的,也可以用函數
constant() 來讀取常量的值。用 get_defined_constants() 可以獲得所有已定義的常量列表。
注: 常量和(全局)變量在不同的名字空間中。這意味著例如 TRUE 和 $TRUE 是不同的。
如果使用了一個未定義的常量,PHP 假定想要的是該常量本身的名字,如同用字符串調用它一樣(CONSTANT 對應 “CONSTANT”)。此時將發出一個 E_NOTICE 級的錯誤。參見手冊中為什麼 $w3sky[bar] 是錯誤的(除非事先用 define() 將 bar 定義為一個常量)。如果只想檢查是否定義了某常量,用 defined() 函數。
常量和變量不同:

* 常量前面沒有美元符號($);
* 常量只能用 define() 函數定義,而不能通過賦值語句;
* 常量可以不用理會變量范圍的規則而在任何地方定義和訪問;
* 常量一旦定義就不能被重新定義或者取消定義;
* 常量的值只能是標量。
定義常量


< ?PHP
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
?>

一個PHP自動轉化變量類型的例子是加法的操作符’+’。如果任何一個操作數都是雙精度數,那麼所有的操作數被當作雙精度數求值,並且結果也是雙精度數。 否則,操作數將被認為是整數,結果也將會是整數。注意這並不影響每個操作數本身的變量類型,唯一的變化就是操作數在計算的過程中被如何處理。 

$foo  =  "0";  //  $foo  是一個字符串  ,值是“0”(ASCII  48)  
$foo++;  //  $foo  是一個字符串,值是“1”(ASCII  49)  
$foo  +=  1;  //  $foo  現在是一個整數(2)了  
$foo  =  $foo  +  1.3;  //  $foo  現在是一個雙精度數(3.3)了  
$foo  =  5  +  "10  Little  Piggies";  //  $foo  是一個整數  (15)  
$foo  =  5  +  "10  Small  Pigs";  //  $foo  是一個整數  (15)

如果你覺得上面例子中最後兩個表達式看起來有點奇怪的話,請看 “字符串的轉化”部分。 
如果你希望強制一個變量被當作某種固定的類型來計算,請看 “類型強制(casting)” 一節。如果你希望轉變一個變量的類型,請看函數“settype()”的說明。 
確定一個變量的類型 
因為PHP自己決定變量的類型並且一般按照需要轉化他們,一個特定的變量的類型不是在任何時間都非常明顯。PHP包括一些函數可以找出這個變量的類型。這 些函數是gettype(), is_long(), is_double(), is_string(), is_array(), 和 is_object(). 
類型強制(type casting) 
在PHP中類型強制同在C語言中大抵相似:將需要的類型的種類寫在要強制的變量的前面的圓括號中。 

$foo  =  10;  //  $foo  是一個整數  
$bar  =  (double)  $foo;  //  $bar  是一個雙精度數

以下的強制方式是允許的: 
(int), (integer) – 強制成整數 
(real), (double), (float) – 強制成雙精度數 
(string) – 強制成字符串 
(array) – 強制成數組 
(object) – 強制成對象 
注意在圓括號中允許制表符(tabs)和空格(spaces) ,因此下面的語句是等價的: 
$foo = (int) $bar; 
$foo = ( int ) $bar; 
字符串轉化 
當一個字符串被當作數字型的值來計算時,他的結果和類型如下面所述的決定。 
如果這個字符串含有字符’.’,’e’,或者’E’,則被當作雙精度類型變量來處理,否則當作是整數。 
這個字符串的值由詞首部分決定。如果這個字符串以任何有效的數字的數據開始,那麼這個數字數據就是這個字符串參加運算的值。否則,值為零(zero)。有 效的數字數據是遵循下面的這些標記的,跟隨在一個或多個數字後面(可以包含小數點),跟隨在一個可選的指數後面。指數是由一個或多個數字跟在’e’或 ’E’後面構成的。 
 
$foo  =  1  +  "10.5";  //  $foo  是雙精度數  (11.5)  
$foo  =  1  +  "-1.3e3";  //  $foo  是雙精度數(-1299)  
$foo  =  1  +  "bob-1.3e3";  //  $foo  是整數  (1)  
$foo  =  1  +  "bob3";  //  $foo  是整數  (1)  
$foo  =  1  +  "10  Small  Pigs";  //  $foo  是整數  (11)
$foo  =  1  +  "10  Little  Piggies";  //  $foo  是整數  (11);  
//  這個字符串包括字符’e’

copyright © 萬盛學電腦網 all rights reserved