程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 常量與變量

PHP 常量與變量

編輯:關於PHP編程

PHP 常量與變量


【常量】
可以用 define() 函數來定義常量,在 PHP 5.3.0 以後,可以使用 const 關鍵字在類定義之外定義常量。一個常量一旦被定義,就不能再改變或者取消定義。
常量只能包含標量數據(boolean,integer,float 和 string)。可以定義 resource 常量,但應盡量避免,因為會造成不可預料的結果。
可以簡單的通過指定其名字來取得常量的值,與變量不同,不應該在常量前面加上 $ 符號。如果常量名是動態的,也可以用函數 constant() 來獲取常量的值。用 get_defined_constants() 可以獲得所有已定義的常量列表。
如果只想檢查是否定義了某常量,用 defined() 函數。
常量和變量有如下不同:
? 常量前面沒有美元符號($);
? 常量只能用 define() 函數定義,而不能通過賦值語句;
? 常量可以不用理會變量的作用域而在任何地方定義和訪問;
? 常量一旦定義就不能被重新定義或者取消定義;
? 常量的值只能是標量。
預定義常量

很多常量都是由不同的擴展庫定義的,只有在加載了這些擴展庫時才會出現,或者動態加載後,或者在編譯時已經包括進去了。這些特殊的常量不區分大小寫,如下:

 

名稱 說明 __LINE__ 文件中的當前行號。 __FILE__ 文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑(如果是符號連接,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。 __DIR__ 文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜槓。(PHP 5.3.0中新增) = __FUNCTION__ 函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。 __CLASS__ 類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用區域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。 __TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的作用區域(例如 Foo\Bar)。 __METHOD__ 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 __NAMESPACE__ 當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)。 【變量】
PHP 中的變量用一個美元符號後面跟變量名來表示。變量名是區分大小寫的。 變量名與 PHP 中其它的標簽一樣遵循相同的規則。一個有效的變量名由字母或者下劃線開頭,後面跟上任意數量的字母,數字,或者下劃線。
變量默認總是傳值賦值。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味著,例如,當一個變量的值賦予另外一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。PHP 也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡單的引用(換言之,"成為其別名" 或者 "指向")了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。
預定義變量
PHP 4.2.0 以及後續版本中,PHP 指令 register_globals 的默認值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變量集在全局范圍內的有效性。例如,為了得到 DOCUMENT_ROOT 的值,將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中獲取 id 值,亦或使用 $_ENV['HOME'] 來代替 $HOME 獲取環境變量 HOME 的值。
?超全局變量 — 超全局變量是在全部作用域中始終可用的內置變量
?$GLOBALS — 引用全局作用域中可用的全部變量
?$_SERVER — 服務器和執行環境信息
?$_GET — HTTP GET 變量
?$_POST — HTTP POST 變量
?$_FILES — HTTP 文件上傳變量
?$_REQUEST — HTTP Request 變量
?$_SESSION — Session 變量
?$_ENV — 環境變量
?$_COOKIE — HTTP Cookies
?$php_errormsg — 前一個錯誤信息
?$HTTP_RAW_POST_DATA — 原生POST數據
?$http_response_header — HTTP 響應頭
?$argc — 傳遞給腳本的參數數目
?$argv — 傳遞給腳本的參數數組

 

global 關鍵字
PHP 的全局變量和 C 語言有一點點不同,在 C 語言中,全局變量在函數中自動生效,除非被局部變量覆蓋。這可能引起一些問題,有些人可能不小心就改變了一個全局變量。PHP 中全局變量在函數中使用時必須聲明為 global或者用特殊的 PHP 自定義 $GLOBALS 數組。$GLOBALS 是一個關聯數組,每一個變量為一個元素,鍵名對應變量名,值對應變量的內容。$GLOBALS 之所以在全局范圍內存在,是因為 $GLOBALS 是一個超全局變量。
靜態變量
變量范圍的另一個重要特性是靜態變量(static variable)。
可變變量
有時候使用可變變量名是很方便的。就是說,一個變量的變量名可以動態的設置和使用。一個普通的變量通過聲明來設置。
要將可變變量用於數組,必須解決一個模稜兩可的問題。這就是當寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變量呢,還是想要 $$a 作為一個變量並取出該變量中索引為 [1] 的值。解決此問題的語法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]。

 

";
	echo invalide_value."
";	
	if(defined("INVALIDE_VALUE"))
	{
		echo "INVALIDE_VALUE 已經定義".__LINE__."
";;
	}
	
	// 變量
	$str1 = 'str1';
	$str2 = & $str1;  // 引用	 
	$str1 = "Changed $str1";
	echo $str1."
";
	echo $str2."
";	
	
	echo $_SERVER['DOCUMENT_ROOT']."
"; // 預定義變量
	
	$gVal = 13;
	function Test() // 全局變量
	{
		global $gVal;
		echo $gVal."
";
		echo $GLOBALS['gVal']."
";
	}
	Test();
	
	function test1()
	{
    	static $a = 0; // 靜態變量
    	echo $a;
    	$a++;
	}
	
	// 可變變量
	class foo {
    var $bar = 'I am bar.';
    var $arr = array('I am A.', 'I am B.', 'I am C.');
    var $r   = 'I am r.';
	}

	$foo = new foo();
	$bar = 'bar';
	$baz = array('foo', 'bar', 'baz', 'quux');
	echo $foo->$bar ."
";
	echo $foo->$baz[1]  ."
";

	$start = 'b';
	$end   = 'ar';
	echo $foo->{$start . $end}  ."
";

	$arr = 'arr';
	echo $foo->$arr[1] ."
";
	echo $foo->{$arr}[1]  ."
";	
?>
\







 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved