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也提供了另外一種方式給變數賦值 引用賦值。這意味著新的變數簡單的引用 換言之,成為其別名 或者 指向 了原始變數。改動新的變數將影響到原始變數,反之亦然。使用引用賦值,簡單地...