變數與常量 PHP手冊筆記

2021-09-19 15:52:11 字數 3642 閱讀 1612

php中的變數用乙個美元符號後面跟變數名來表示。變數名是區分大小寫的,並且出現中文可能也是合法的。

變數預設總是傳值賦值。php也提供了另外一種方式給變數賦值:引用賦值。這意味著新的變數簡單的引用(換言之,"成為其別名" 或者 "指向")了原始變數。改動新的變數將影響到原始變數,反之亦然。使用引用賦值,簡單地將乙個&符號加到將要賦值的變數前(源變數)。注意,只有有名字的變數才可以引用賦值。

php擁有大量預定義變數,許多變數依賴與伺服器,某些預定義變數以命令列形式執行時並不生效。

php提供了一套附加的預定陣列,這些陣列變數包含了來自web伺服器(如果可用),執行環境,和使用者輸入的資料,通常被稱為自動全域性變數(autoglobals)或者超全域性變數(superglobals)。

這裡的變數範圍指的是,它定義的上下文背景,也就是它的生效範圍。變數的範圍包含了include和require引入的檔案。

php的全域性變數和c語言有一點點不同,在c語言中,全域性變數在函式中自動生效,除非被區域性變數覆蓋。php中全域性變數在函式中使用時必須宣告為global。

<?php 

$a = 'hello';

function test()

// test();

include 'b.inc';

b.inc內容如下:

<?php 

echo 'hello';

?>

該程式能夠正常輸出hello,但是被注釋掉的test()不能正常解析,因為變數$a是未定義的。

若在某個函式中想使用全域性變數,可以通過下面兩種方式。

global關鍵字

global $a, $b;
在函式中宣告全域性變數後,對任一變數的所有引用都會指向其全域性版本。

$globals超全域性變數陣列

$globals['b'] = $globals['a'] + $blobals['b'];
用法同global關鍵字相似。

靜態變數僅在區域性函式域中存在,但當程式執行離開此作用域時,其值並不丟失。並且,只在宣告時初始化一次,每次呼叫函式並不會覆蓋靜態函式的值。

靜態變數在宣告中用表示式的結果對其賦值會導致解析錯誤,靜態宣告是在編譯時解析的。

<?php 

function test()

$cnt--;

}test();

和c語言的static相似,下面這段c**也可以把0~9十個數字依次輸出。

#include void test(void) 

cnt--;

}int main(void)

對於變數的static和global定義是以引用的方式實現的。

可變變數是php語言中的一種特殊用法,不知其他語言存不存在。

簡而言之,可變變數就是,乙個可變變數獲取了乙個普通變數的值作為這個可變變數的變數名。

<?php 

$a = 'hello';

$$a = 'world';

echo "$a $$a"; // hello $hello

echo "$a $"; // hello world

當可變變數用於陣列時,可能會出現模稜兩可的問題。比如,寫下$$a[1],編譯器會報錯的,你想要表達的意思需要用下面兩種方式替換掉。

$

$a[1]作為乙個變數

$[1]

$$a作為乙個變數並取出變數中索引為1的值。

當表單提交給php指令碼時,表單中的資訊自動在指令碼中可用,可以通過$_get$_post$_request訪問。

注意,變數名中的點和空格被轉換成下劃線。例如變成了$_request["a_b"],下面的示例中展示了表單中識別符號的使用。

表單處理檔案process.php

<?php 

var_dump(isset($_post['my.text']));

var_dump(isset($_post['mytext']));

var_dump(isset($_post['my_text']));

var_dump($_post['my_text']);

因為句點不是php變數名中的合法字元,輸出結果如下所示。

boolean false

boolean false

boolean true

string 'h3' (length=2)

magic_quotes_gpc配置指令影響到get/post/cooie的值,這個特性已經廢棄移除,輸入中的單引號、雙引號、反斜槓和null字元都不會被轉義。若需要轉義可使用addslashes(),若需要反引用乙個引用的字串需要使用stripslashes()

php也懂得表單變數上下文中的陣列,下面的例子使用了更複雜的表單變數,並將表單post給自己並在提交時顯示資料。

<?php 

if(isset($_post['action'])) else else else

setcookie('cnt', $cnt, time() + 3600);

cookie資料在相應的cookie陣列中可用,如果將多個值賦給乙個cookie變數,必須將其賦成陣列。

常量在指令碼執行期間其值不能改變。常量大小寫敏感,傳統上常量識別符號總是大寫。常量一旦定義就不能被重新定義或取消定義,常量的值只能是標量。

可以用define()函式來定義常量,也可以使用const關鍵字在類定義之外定義常量。自定義常量不要以雙下劃線開頭,可能會與魔術常量衝突。

define('foo', 'something');

const foo = 'something';

使用const關鍵字定義常量必須處於最頂端的作用區域,因為用此方法是在編譯時定義的。常量的範圍是全域性的,不用管作用區域,就可以在指令碼的任何地方訪問常量。

魔術常量值能變,但它其實不是常量。

__line__  // 檔案中的當前行號

__file__ // 檔案的完整路徑和檔名,絕對路徑

__dir__ // 檔案所在的目錄,除非根目錄,否則不包括末尾斜槓,等價於dirname(__file__)

__function__ // 函式名稱,區分大小寫

__class__ // 類的名稱,包括其被宣告的作用區域

__trait__ // trait的名字,包括其被宣告的作用區域

__method__ // 類的方法名

__namespace__ // 當前命名空間的名稱

php向它執行的任何指令碼提供了大量的預定義常量,上面8個魔術常量的值隨著它們在**中的位置改變而改變。

(全文完)

php學習筆記 變數與常量

php是一種解釋性語言,以作為php的開始標籤和結束標籤 伺服器只解析php標籤內的內容,不在php標籤內的內容直接返回給客戶端 注意 如果整個文件都是php 則結束標籤?可以省略目錄 不同於c c php變數型別是弱型別,它支援八種原始型別 四種標量型別 兩種復合型別 兩種特殊型別 php的變數以...

變數 PHP手冊筆記

原文 變數 php手冊筆記 php中的變數用乙個美元符號後面跟變數名來表示。變數名是區分大小寫的,並且出現中文可能也是合法的。變數預設總是傳值賦值。php也提供了另外一種方式給變數賦值 引用賦值。這意味著新的變數簡單的引用 換言之,成為其別名 或者 指向 了原始變數。改動新的變數將影響到原始變數,反...

變數 PHP手冊筆記

php中的變數用乙個美元符號後面跟變數名來表示。變數名是區分大小寫的,並且出現中文可能也是合法的。變數預設總是傳值賦值。php也提供了另外一種方式給變數賦值 引用賦值。這意味著新的變數簡單的引用 換言之,成為其別名 或者 指向 了原始變數。改動新的變數將影響到原始變數,反之亦然。使用引用賦值,簡單地...