1. 程式人生 > >PHP---3.PHP的變數和常量

PHP---3.PHP的變數和常量

1.PHP變數

變數是用於儲存資訊的”容器”

1.1 變數的命名規則

  1. 變數必須以$開頭,比如$name$不是變數名的一部分,僅僅表示變數名的開始。

  2. 除了$以外,以字母、下劃線開頭,後面跟的是字母、數字、下劃線。

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
?>