測試環境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25
PHP 中的變量用一個美元符號$
后面跟變量名來表示。變量名區分大小寫;
變量名與 PHP 中其它的標簽一樣遵循相同的規則。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數量的字母,數字,或者下劃線。按照正常的正則表達式,它將被表述為:[a-zA-Z_/x7f-/xff][a-zA-Z0-9_/x7f-/xff]*
;
PHP 中全局變量在函數中使用時必須聲明為 global;
靜態變量僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失;
不能為$this關鍵字賦值
<?php //$this = 'text'; // error:Cann't re-assign $this $name = 'this'; $$name = 'text'; // sets $this to 'text',在PHP 5.6.29上可運行,在PHP 7.1.0上依然是錯誤 echo $this;?>使用異或操作可以在不增加臨時變量的情況下互相交換變量值,對integer和string型變量有效,數組和對象無效。
<?PHP $a=5; $b=3; //使用異或(XOR)可以在不添加臨時變量的情況下,交換兩個變量的數據。 //以下代碼會交換$a,$b的值。 $a^=$b; $b^=$a; $a^=$b; echo $a.PHP_EOL.$b;?>unset()銷毀局部變量$a
,全局變量$a
仍然存在,同理unset()銷毀全局變量$a
,局部變量仍然存在。 使用NULL將局部變量置空,則局部和全局變量均為NULL.
銷毀類的實例化對象的時候,類的靜態方法內部的靜態變量并不會被銷毀。
<?phpclass Foo { public static function Bar() { static $var = 0; return ++ $var; } }$Foo_instance = new Foo;PRint $Foo_instance->Bar(); // prints 1unset($Foo_instance);echo "<br/>";$Foo_instance2 = new Foo;print $Foo_instance2->Bar(); // prints 2?>在函數嵌套的結構里,函數的參數相對于內部函數的變量并不是全局變量
<?php// $var1 is not declared in the global scopefunction a($var1){ function b(){ global $var1; echo $var1; // there is no var1 in the global scope so nothing to echo } b(); }a('hello');?>一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。
在可變變量中,可以使用花括號來給變量名清晰定界。
<?php //在可變變量中,使用花括號來給屬性名清晰定界 $a = 'hello'; $$a = 'world'; echo "$a ${$a}"; //等價于 echo "$a $hello";?>可以在變量前添加更多的$符號。
<?php $I = 'love'; $love = 'you'; $you = 'I'; echo $$$I." ".$$$$I." ".$$I; ?>可變變量$符號之間有空格、注釋時,可變變量仍然可以被合法解析
<?php $foo = 'bar'; $ /** * 可變變量$符號之間有空格、注釋,可變變量仍然可以被合法解析. */ $foo = 'magic'; echo $bar; // Outputs magic.?>類中的可變屬性如果為數組,其默認解析規則在PHP 5 和PHP 7中有所不同,為了解決版本兼容問題,建議使用{}給屬性名清晰定界。
<?php class foo { public $bar = 'I am bar.'; public $arr = array('I am A.', 'I am B.', 'I am C.'); public $r = 'I am r.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo $foo->$bar . "<br/>/n"; echo $foo->$baz[1]. "<br/>/n"; //PHP 5 中按 $foo->{$baz[1]}解析, //PHP 7中按$foo->{$baz}[1]解析,會通知未定義屬性 foo::$Array $start = 'b'; $end = 'ar'; echo $foo->{$start . $end} . "<br/>/n"; $arr = 'arr'; echo $foo->{$arr}[1] . "<br/>/n"; //PHP 5 中按$foo->{$arr[1]}解析成$foo->r, //PHP 7 中按$foo->{$arr}[1]解析為$foo->arr[1] echo $foo->{$arr}[1] . "<br/>/n";?>可以使用變量、常量、函數調用拼接成另一個變量,但是不能拼接函數名。
<?php define('ONE', 1); function one() { return 1; } $one = 1; ${"foo$one"} = 'foo'; echo $foo1,"<br/>"; // foo ${'foo' . ONE} = 'bar'; echo $foo1,"<br/>"; // bar ${'foo' . one()} = 'baz'; echo $foo1,"<br/>"; // baz $foo = 'info'; //{"php$foo"}(); // 解析錯誤 // You'll have to do: $func = "php$foo"; $func(); ?>來自表單中的變量,變量名中的點和空格被轉換成下劃線。例如 <input name="a.b" />
變成了 $_REQUEST["a_b"]
。
test.php文件如下
<?php var_dump($_POST);?>常量是一個簡單值的標識符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變(除了所謂的魔術常量,它們其實不是常量)。常量默認為大小寫敏感,一般常量標識符總是大寫的。
常量名和其它任何 PHP 標簽遵循同樣的命名規則。合法的常量名以字母或下劃線開始,后面跟著任何字母,數字或下劃線。用正則表達式是這樣表達的:[a-zA-Z_/x7f-/xff][a-zA-Z0-9_/x7f-/xff]*
。
PHP 5.3.0之后新增const
關鍵字定義常量;
定義常量時,常量名不可以有空格。
<?php define ("YEAR ", 2017); echo YEAR;?>PHP 7.1.0 之后const可以顯式使用訪問控制修飾符,在此之前不能使用訪問控制修飾符。
<?phpclass constants { const MAX_VALUE = 10; public const MIN_VALUE =1; }echo constants::MAX_VALUE;echo constants::MIN_VALUE; //PHP 7.1.0 之后可顯式寫訪問控制修飾符?>使用define()定義常量時,可以使用內置關鍵字聲明常量,使用constant()返回常量值,但是使用const定義常量則會報錯,不能重新聲明常量。
<?php define('TRUE','My constant value'); echo constant('TRUE'); // outputs 'My constant value' //const ECHO = 'My constant value ECHO'; //致命錯誤,不能重新聲明常量 //echo ECHO;?>有關const和define()定義常量的區別,參見PHP定義常量時const關鍵字和define()函數的區別.
新聞熱點
疑難解答
圖片精選