PHP 7 PHP 變數和常量的定義

2021-09-05 15:10:11 字數 4754 閱讀 8979

本章說說變數的定義。

如果對於變數和常量的定義,你會注意幾個方面呢?你可能會想到:

分別講述吧。

1.如何定義變數,它和c# 等語言有什麼不同呢?

php 中的變數用乙個美元符號後面跟變數名來表示。變數名是區分大小寫的。例如:

<?php

$var='

jim'

;$var='

kimi;

echo "$var,$var";//輸出「jim,kimi"

?>

你可能還關心變數的命名,其實和大多數語言一樣。

2. 變數區分大小寫嗎?

如 1裡說的,區分大小寫。

注意,需要說明的一點是自php4以來,引入了引用賦值的概念,其實和多數語言的引用類似,不過我覺得最類似的是c/c++.因為它也用到了"&"符號。例如: 

1php2

$foo='

bob'

;              

//賦值'bob'給foo

3$bar=&

$foo

;              

//通過$bar引用.注意&符號

4$bar="

my name is $bar

";  

//修改 $bar

5echo

$bar;6

echo

$foo

;                

//$foo 也修改了.

7?>

和其他語言一樣,只能對有變數名的變數才可以引用。

3. php其他重要點

預定義變數

預定義變數在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

中獲取 id 值,亦或使用

$_env['home'] 來代替

$home 獲取環境變數 home 的值。

從 php 4.1.0 開始,php 提供了一套附加的預定陣列,這些陣列變數包含了來自 web 伺服器(如果可用),執行環境,和使用者輸入的資料。這些陣列非常特別,它們在全域性範圍內自動生效,例如,在任何範圍內自動生效。因此通常被稱為自動全域性變數(autoglobals)或者超全域性變數(superglobals)。(php 中沒有使用者自定義超全域性變數的機制。)超全域性變數羅列於下文中;而且,你也將注意到舊的預定義陣列(

$http_*_vars)仍舊存在。自 php 5.0.0 起,長格式的 php 預定義變數可以通過設定register_long_arrays來遮蔽。

下表是php的超全域性變數:

超全域性變數

描述

$globals

包含乙個引用指向每個當前指令碼的全域性範圍內有效的變數。該陣列的鍵名為全域性變數的名稱。從 php 3 開始存在 $globals 陣列。

$_server

變數由 web 伺服器設定或者直接與當前指令碼的執行環境相關聯。類似於舊陣列 $http_server_vars 陣列(依然有效,但反對使用)。

$_get

經由 url 請求提交至指令碼的變數。類似於舊陣列 $http_get_vars 陣列(依然有效,但反對使用)。

$_post

經由 http post 方法提交至指令碼的變數。類似於舊陣列 $http_post_vars 陣列(依然有效,但反對使用)。

$_cookie

經由 http cookies 方法提交至指令碼的變數。類似於舊陣列 $http_cookie_vars 陣列(依然有效,但反對使用)。

$_files

經由 http post 檔案上傳而提交至指令碼的變數。類似於舊陣列 $http_post_files 陣列(依然有效,但反對使用)

$_env

執行環境提交至指令碼的變數。類似於舊陣列 $http_env_vars 陣列(依然有效,但反對使用)。

$_request

經由 get,post 和 cookie 機制提交至指令碼的變數,因此該陣列並不值得信任。所有包含在該陣列中的變數的存在與否以及變數的順序均按照 php.ini 中的 variables_order 配置指示來定義。此陣列在 php 4.1.0 之前沒有直接對應的版本。參見import_request_variables()

$_session

當前註冊給指令碼會話的變數。類似於舊陣列 $http_session_vars 陣列(依然有效,但反對使用)

變數的應用範圍

每個變數都有應用範圍,那麼php是怎麼定義的呢?還是先看看下面**吧: 1

php2

$var=0

;3function

test(

$index)4

8test(1);

9test(2)

10?>

你認為以上的**會顯示什麼結果呢?

如果你認為是下面:

結果1:

the 

1number

is 1

the 

2number

is 2

不好意思,你的結果是錯誤的。

其實正確的結果應該是:

結果2the 

1number

is 1

the 

2number

is 1

那麼你從其中發現了什麼呢?我們可以知道雖然第2行的**定義在外面,但第5行的變數和它是不一樣的。第5行的變數僅在這個函式裡使用。進一步的,如果我想呼叫第一行的變數而顯示結果2.**可以如下: 1

php2

$var=0

;3function

test(

$index)4

9test(1);

10test(2)

11?>

這個**段和上面的**段有何區別呢?注意第5行,多了乙個global關鍵字。明白了吧。

那麼還有沒有其他方法呢?答案是肯定的。

**如下: 1

php2

$var=0

;3function

test(

$index)4

9test(1);

10test(2)

11?>

**有什麼特殊的嗎?那就是用到了

$globals這個超全域性變數。

php也有靜態變數的說法。不過靜態變數一般用在函式裡,只能是區域性變數了。看看下面**吧: 1

php2

function

test()38

test();

9test();

10?>

結果為 1

2 php還有乙個相當令人興奮的特性:可變變數

所謂可變變數,就是乙個變數的變數名可以動態的設定和使用。

看看下面的例子: 1

php2$a=

"hello";

3$hello="

world";

4echo$a.

"".$

$a;5?>

輸出的結果居然是hello,world.太神奇了。$$a其實就是$hello,因為$a的值是hello。

變數就這多了。下面看看常量。

常量

php的常量是不是前面加const呢?讓我們看一看。

不是的。在php必須用下面的方式定義。

booldefine( string name, mixed value [, bool case_insensitive] )

name 為常量名,value為常量的值。case_insensitive]為大小寫敏感。預設為敏感。例如: 1

php2

define("

constant",

"hello world.");

3echo

constant

; //

outputs "hello world."

4echo

constant

; //

outputs "constant" and issues a notice.56

define("

greeting",

"hello you.",

true);7

echo

greeting; 

//outputs "hello you."

8echo

greeting; 

//outputs "hello you."910

?>

常量和變數不同:

PHP中的魔術常量 預定義常量和預定義變數

1.魔術常量 php中有八個魔術常量,它們的值會隨著它們在 中的位置的改變而改變。這些特殊的常量不區分大小寫。2.預定義常量 核心預定義常量 是在php的核心中就定義好了的常量。區分大小寫。php version 返回php的版本。php os 返回 執行php直譯器的作業系統名稱。php eol ...

php常量及變數定義方法

1.定義常量define constant hello world.常量只能包含標量資料 boolean,integer,float 和 string 呼叫常量時,只需要簡單的用名稱取得常量的值,而不能加 符號,如 echo constant 注 常量和 全域性 變數在不同的名字空間中。這意味著例如...

php預定義常量 變數

php中可以使用預定義常量獲取php中的資訊,常用的預定義常量如下表所示。常量名功能 file 預設常量,php程式檔名 line 預設常量,php程式行數 php version 內建常量,php程式的版本,如3.0.8 dev php os 內建常量,執行php解析器的作業系統名稱,如windo...