PHP---3.PHP的變數和常量
1.PHP變數
變數是用於儲存資訊的”容器”
1.1 變數的命名規則
變數必須以
$
開頭,比如$name
。$
不是變數名的一部分,僅僅表示變數名的開始。除了$以外,以字母、下劃線開頭,後面跟的是字母、數字、下劃線。
1.2 PHP 是一門弱型別語言
因為PHP是弱型別語言,所以不必向 PHP 宣告該變數的資料型別。
PHP 會根據變數的值,自動把變數轉換為正確的資料型別。
在強型別的程式語言中,我們必須在使用變數前先宣告(定義)變數的型別和名稱。
1.3 傳值和傳址
傳值
傳值,儲存值的空間是兩個,更改一個空間的值不影響另外的變數;
傳址
&表示取出變數的地址
傳地址,儲存值的空間就一個,更改一個變數的值,另一個變數也會變化,因為兩個變數指向同一個空間。
1.4 銷燬變數
通過unset()
銷燬變數,但是注意unset
用來銷燬變數名
$a
地址指向的值,並沒有被銷燬掉,任然可以被$b
獲取,但是如果沒有變數去獲取地址中的值,那麼unset()
銷燬的變數名指向的地址的值便會由PHP的垃圾回收機制去銷燬。垃圾資料就是沒有變數引用的資料。
<?php
$a = 10;
$b = &$a;
unset($a);
echo $a; // 為空,因為已經獲取不到$a了。
echo $b; // 10
?>
1.5 超全域性變數
PHP中預定義了幾個超級全域性變數(superglobals) ,這意味著它們在一個指令碼的全部作用域中都可用。 你不需要特別說明,就可以在函式及類中使用。
超全域性變數以$_開頭,PHP 超級全域性變數列表:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
超全域性變數的資料型別都是陣列。
1.5.1 $_GET
$_GET
被廣泛應用於收集表單資料,在HTML form
標籤的指定該屬性:"method="get"
。
$_GET
也可以收集URL中傳送的資料。
<?php
var_dump ($_GET);
?>
1.5.2 $_POST
$_POST
被廣泛應用於收集表單資料,在HTML form
"method="post"
。
1.5.3 $_REQUEST
$_REQUEST
:儲存的是post和get的資料
注意: 通過$_REQUEST儲存get和post的值,如果有同名的元素, 預設情況下post
的會覆蓋get
。
當然,我們可以在配置檔案中進行更改。/etc/php.ini.default
(window下是php.ini)。
request order="GP" //表示先接受get,後接受post,如果想反過來就改為'PG'
1.5 可變變數
將變數名儲存到另一個變數中
<?php
$a = 'this is test';
$b = 'a';
echo $$b; // this is test
?>
$b
儲存的是a
,所以$$b
指的就是$a
, 也就是this is test
2. 常量
預設是全域性變數,可以在整個執行的指令碼的任何地方使用。
2.1 自定義常量
當一個數據在指令碼執行的週期內不發生變化,可以將這個資料儲存在常量中。常量前面沒有$。
語法:define(常量名,常量值,是否區分大小寫),預設是區分大小寫的。
<?php
define('NAME','好好學習,天天向上');
echo NAME; // 好好學習,天天向上
echo name; // name (常量預設是區分大小寫)
?>
更改為不區分大小寫:
<?php
define('NAME','好好學習,天天向上', true);
echo NAME; // 好好學習,天天向上
echo name; // 好好學習,天天向上
?>
定義常量可以用特殊字元,但是呼叫的時候必須通過constant
關鍵字呼叫
<?php
define('0_0','好好學習,天天向上');
echo constant('0_0'); // 好好學習,天天向
?>
常量一旦定義,就不能再重新定義,可以在定義常量的時候先通過defined
函式來判斷常量是否已經定義。
<?php
define('MSG','好好學習,天天向上');
if (defined('MSG')) {
echo '已經定義過了'; // 已經定義過了
} else {
define('MSG','好好學習,天天向上'); //如果沒有定義的話,那就重新定義
}
?>
2.2 預定義常量
指的是在PHP中已經定義的常量。
例如:
<?php
echo PHP_VERSION; // 7.1.16 PHP的版本
echo PHP_OS; //Darwin 執行系統
?>
2.3 PHP 魔術常量
PHP 向它執行的任何指令碼提供了大量的預定義常量。
不過很多常量都是由不同的擴充套件庫定義的,只有在載入了這些擴充套件庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。
有八個魔術常量它們的值隨著它們在程式碼中的位置改變而改變。
<?php
echo __LINE__ ; //檔案中的當前行號。
echo __FILE__ ; //檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名
echo __DIR__ ; //檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。
echo __FUNCTION__ ; //函式名稱
echo __CLASS__ ; // 類的名稱
echo __TRAIT__ ; //Trait 名包括其被宣告的作用區域(例如 Foo\Bar)
echo __METHOD__ ; // 類的方法名
echo __NAMESPACE__ ; //當前名稱空間的名稱(區分大小寫)
?>
2.4 顯示所有常量
<?php
var_dump(get_defined_constants(true)); //true表示所有的常量按照類分別
?>
這裡在提示下,而我們也可以使用const
定義常量
<?php
const NAME = 'hcd';
echo NAME; // hcd
?>