php簡(jiǎn)明手冊(cè)

# **PHP簡(jiǎn)明手冊(cè)**

## **變量 和 常量**

> 1. 變量和常量是PHP中最基本的數(shù)據(jù)存儲(chǔ)單元,它們可以存儲(chǔ)不同類型的數(shù)據(jù);

> 2. PHP的變量或常量的數(shù)據(jù)類型由程序的上下問(wèn)決定,跟強(qiáng)類型語(yǔ)言(如:C等)由很大不同!

--------------------------------------------------------------------------------

### 什么是變量?

1. 變量是用于臨時(shí)存儲(chǔ)值的容器;

2. 這些值可以是數(shù)字、文本,或者復(fù)雜得多的排列組合;

3. 變量又是指在程序的運(yùn)行過(guò)程中隨時(shí)可以發(fā)生變化的量,是程序中數(shù)據(jù)臨時(shí)存放的場(chǎng)所;

4. 簡(jiǎn)而言之:變量是用于跟蹤幾乎所有類型信息的簡(jiǎn)單工具!

5. PHP 中的變量是用一個(gè)美元符號(hào)($)后面跟變量名來(lái)表示,變量名是區(qū)分大小寫的。

- 變量名與PHP中其它的標(biāo)簽一樣遵循相同的規(guī)則,一個(gè)有效的變量名由字母或下劃線開頭,后面跟上任意數(shù)量的字母、數(shù)字、或者下劃線

- 按照正則表達(dá)式來(lái)表述php變量名 `[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*`

- $this 是一個(gè)特殊的變量,它不能被賦值

- php 提供了大量的預(yù)定義變量

- 許多變量依賴于運(yùn)行的服務(wù)器的版本和設(shè)置,及其它因素

--------------------------------------------------------------------------------

### 什么式常量?

1. 常量是用于一些數(shù)據(jù)計(jì)算中固定的數(shù)值;

2. 常量是一個(gè)簡(jiǎn)單值的標(biāo)識(shí)符(名字);

3. 常量申明的類型只能是標(biāo)量數(shù)據(jù)(`boolean` `integer` `float` `string`);

4. 在程序執(zhí)行期間一個(gè)常量一旦被定義,就不能再改變或者取消定義(除了所謂的魔術(shù)常量,它們其實(shí)不是常量);

5. 常量默認(rèn)為大小寫敏感。傳統(tǒng)上常量標(biāo)識(shí)符總是大寫的。

- 按照正則表達(dá)式來(lái)表述php常量名 `[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*`

6. 常量的作用于是全局的(這是用它的主要原因)

- 可以在腳本的任何地方什么和訪問(wèn)到常量

7. PHP 中可以用 `define()` 函數(shù)來(lái)定義常量:

- php 5.3 以后可以使用const關(guān)鍵字在類定義之外定義常量

- php 中常量不僅可以自定義,而且php默認(rèn)提供了大量預(yù)定定義常量

- php 中也提供的一些比較實(shí)用的 魔術(shù)常量(它們其實(shí)不是常量)

--------------------------------------------------------------------------------

### 常量與變量有哪些區(qū)別?

1. 常量前面沒(méi)有美元符號(hào)($);

2. 常量只能使用 `define()` 函數(shù)定義,而不能通過(guò)賦值語(yǔ)句;

3. 常量可以不用理會(huì)變量的作用域,而在任何地方定義和訪問(wèn);

4. 常量一旦定義就不能被重新定義或取消定義;

5. 常量的值只能是標(biāo)量(`boolean` `integer` `float` `string`);

--------------------------------------------------------------------------------

### **變量的范圍**

> 1. 變量的范圍也就是它的生效范圍

> 2. 大部分的 php 變量只有一個(gè)單獨(dú)的使用范圍,包含了 `include` `require` 引入的文件;

> 3. 當(dāng)一個(gè)變量執(zhí)行賦值動(dòng)作后,會(huì)隨著申明區(qū)域位置的差異而有不同的使用范圍;

> 4. 大致上來(lái)說(shuō):變量會(huì)依據(jù)申明的位置分為局部變量和全局變量?jī)煞N。

#### **局部變量**

1. 局部變量也稱內(nèi)部變量,是在函數(shù)內(nèi)部申明的變量;

- 作用域僅限于函數(shù)內(nèi)部,離開該函數(shù)后再使用這種變量是非法的

2. 為申明函數(shù)設(shè)置的參數(shù)因?yàn)橹荒茉诒竞瘮?shù)的內(nèi)部使用,所以也是局部變量;

- `func_test("參數(shù)1", "參數(shù)2");`

- 函數(shù)的參數(shù)具體數(shù)值從函數(shù)外部獲得(函數(shù)被調(diào)用傳入的值),作用域僅限于函數(shù)內(nèi)部

- 直接在函數(shù)中申明的變量只能在內(nèi)部被賦值,作用域僅限于函數(shù)內(nèi)部

3. 每次函數(shù)被調(diào)用時(shí),函數(shù)內(nèi)部的變量才被申明,執(zhí)行完畢后函數(shù)內(nèi)部的變量都被釋放。

#### **全局變量**

1. 全部變量也稱外部變量,是在函數(shù)外部定義的;

- 作用域:從變量定義出開始,到本程序文件的末尾

2. php中的全局變量與其它變成語(yǔ)言不同

- 在php中,由于函數(shù)可以視為單獨(dú)的程序片段,所以局部變量會(huì)覆蓋全局變量的能見度,因此在函數(shù)中無(wú)法直接調(diào)用全局變量

3. 函數(shù)如何使用全局變量?

- 在函數(shù)內(nèi)部利用 `global` 關(guān)鍵字定義指定的全局變量:

```php

- `預(yù)定義變量` 又稱 `超全局變量` `超全局?jǐn)?shù)組`

> - 超全局?jǐn)?shù)組(變量),在PHP的腳本中,已經(jīng)申明完成的變量,你可以直接就去使用即可!變量的名字已經(jīng)規(guī)定好的了

> - 對(duì)于全部腳本而言, PHP提供了大量的預(yù)定義變量。這些變量將所有的 `外部變量(包括來(lái)自 PHP 之外的變量,如表單提交 )` 表示成內(nèi)建環(huán)境變量,并且將錯(cuò)誤信息表示成返回頭。

預(yù)定義變量名? ? ? | 預(yù)定義變量值? ? ? ? ? | 說(shuō)明

----------- | --------------- | --------------------------------------------------------------------------------------------------------------

`$GLOBALS`? | 引用全局作用域中可用的全部變量 | 一個(gè)包含了全部變量的全局組合數(shù)組,變量的名字就是數(shù)組的鍵

`$_SERVER`? | 服務(wù)器和執(zhí)行環(huán)境信息? ? ? | 一個(gè)包含了諸如頭信息(header)、路徑(path)以及腳本位置等信息的數(shù)組

`$_GET`? ? | HTTP GET 變量? ? | 通過(guò) `URL` 參數(shù)傳遞給當(dāng)前腳本的變量的數(shù)組

`$_POST`? ? | HTTP POST 變量? ? | 當(dāng)HTTP POST請(qǐng)求的 `Content-Type` 是 `application/x-www-form-urlencoded` 或 `multipart/form-data` 時(shí),會(huì)將變量以關(guān)聯(lián)數(shù)組形式傳入當(dāng)前腳本

`$_FILES`? | HTTP 文件上傳變量? ? | 通過(guò) `HTTP POST` 方式上傳到當(dāng)前腳本的項(xiàng)目的數(shù)組

`$_COOKIE`? | HTTP Cookies? ? | 通過(guò) `HTTP Cookies` 方式傳遞給當(dāng)前腳本的變量的數(shù)組

`$_SESSION` | Session 變量? ? ? | 當(dāng)前腳本可用 `SESSION` 變量的數(shù)組

`$_REQUEST` | HTTP Request 變量 | 默認(rèn)情況下包含了 `$_GET` `$_POST` 和 `$_COOKIE`的數(shù)組

`$_ENV`? ? | 環(huán)境變量? ? ? ? ? ? | 通過(guò)環(huán)境方式傳遞給當(dāng)前腳本的變量數(shù)組

--------------------------------------------------------------------------------

### **PHP 中常見的預(yù)定義常量**

1. 在 PHP 中,除了可以自己定義常量,還預(yù)定義了一系列系統(tǒng)常量,可以在程序中直接使用來(lái)完成一些特殊功能;

2. 不過(guò)很多常量都是由不同的擴(kuò)展庫(kù)定義的,只有在加載了這些擴(kuò)展庫(kù)時(shí)才會(huì)出現(xiàn):

- 或者動(dòng)態(tài)加載后

- 或者在編譯 PHP 時(shí)已經(jīng)包括進(jìn)去了

- 這些分布在不同擴(kuò)展模塊中的預(yù)定義常量有多種不同的開頭,決定了各種不同的類型

const name? ? ? ? ? ? ? ? | const value? ? ? ? | const info

------------------------- | ------------------- | ---------------------

`__PHP_OS__`? ? ? ? ? ? ? | `UNIX` OR `WINNT`? | 執(zhí)行PHP解析的操作系統(tǒng)名稱

`__PHP_VERSION__`? ? ? ? | 5.2.6? ? ? ? ? ? ? | 當(dāng)前 PHP 服務(wù)器的版本

`__TRUE__`? ? ? ? ? ? ? ? | TURE? ? ? ? ? ? ? ? | 代表布爾值, 真

`__FALSE__`? ? ? ? ? ? ? | FALSE? ? ? ? ? ? ? | 代表布爾值, 假

`__NULL__`? ? ? ? ? ? ? ? | NULL? ? ? ? ? ? ? ? | 代表空值

`__DIRECTORY_SEPARATOR__` | `\` OR `/`? ? ? ? ? | 根據(jù)操作系統(tǒng)決定目錄的分隔符

`__PATH_SEPARATOR__`? ? ? | `;` OR `:`? ? ? ? ? | 根據(jù)操作系統(tǒng)決定環(huán)境變量的的目錄列表分隔符

`__E_ERROR__`? ? ? ? ? ? | 1? ? ? ? ? ? ? ? ? | 錯(cuò)誤,導(dǎo)致 PHP 腳本運(yùn)行終止

`__E_WARNING__`? ? ? ? ? | 2? ? ? ? ? ? ? ? ? | 警告,不會(huì)導(dǎo)致 PHP 腳本運(yùn)行終止

`__E_PARSE__`? ? ? ? ? ? | 4? ? ? ? ? ? ? ? ? | 解析錯(cuò)誤,有程序解析器報(bào)告

`__E_NOTICE__`? ? ? ? ? ? | 8? ? ? ? ? ? ? ? ? | 非關(guān)鍵的錯(cuò)誤,例如變量未初始化

`__M_PI__`? ? ? ? ? ? ? ? | 3.141 592 653 589 8 | 數(shù)學(xué)中的 π

--------------------------------------------------------------------------------

### **PHP 中的魔術(shù)常量**

1. php 中還有幾個(gè)常量會(huì)根據(jù)它們使用的位置而改變,這樣的常量在 php 中被稱為 `魔術(shù)常量` ;

2. php `魔術(shù)常量` 不區(qū)分大小寫

常量名? ? ? ? ? ? | 常量值? ? ? | 說(shuō)明

--------------- | --------- | ---------------------

`__FILE__`? ? ? | 當(dāng)前的文件名? ? | 在哪個(gè)文件中使用,就代表哪個(gè)文件名稱

`__LINE__`? ? ? | 當(dāng)前的行數(shù)? ? | 在代碼的哪行使用,就代表哪行的行號(hào)

`__FUNCTION__`? | 當(dāng)前的函數(shù)名? ? | 在哪個(gè)函數(shù)中時(shí)間,就代表哪個(gè)函數(shù)名

`__CLASS__`? ? | 當(dāng)前的類名? ? | 在哪個(gè)類中使用,就代表哪個(gè)類的類名

`__METHOD__`? ? | 類下面的當(dāng)前方法名 | 在類下面的哪個(gè)方法中使用,就代表這個(gè)方法名

`__DIR__`? ? ? | 當(dāng)前目錄名? ? | 在哪個(gè)文件下使用,就代表哪個(gè)文件名

`__TRAIT__`? ? | 不常用? ? ? | 不常用

`__NAMESPACE__` | 當(dāng)前命名空間名? | 當(dāng)前命名空間的名稱

--------------------------------------------------------------------------------

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容