1. 程式人生 > >PHP 常量、PHP 變量全解析(超全局變量、變量的8種數據類型等)

PHP 常量、PHP 變量全解析(超全局變量、變量的8種數據類型等)

ret each 回收 操作系統 js xml name static bject 單獨

常量特點

  • 常量一旦被定義就無法更改或撤銷定義。
  • 常量名不需要開頭的$
  • 與變量不同,常量貫穿整個腳本是自動全局的。 作用域不影響對常量的訪問
  • 常量值只能是字符串或數字

設置 PHP 常量

如需設置常量,請使用 define(name, value) 函數,它有三個參數:
- 首個參數定義常量的名稱
- 第二個參數定義常量的值
- 可選的第三個參數規定常量名是否對大小寫敏感。默認是大小寫敏感:false。

define("MYNAME", "白小明");
echo MYNAME; // 白小明
echo MyName; // undefined MyName

define("NAME", "白小明", true);
echo NAME; // 白小明
echo Name; // 白小明 

獲取 PHP 常量

  • 使用常量名直接獲取值;
  • 使用 constant() 函數,它和直接使用常量名輸出的效果是一樣的,但函數可以動態的輸出不同的常量,在使用上要靈活、方便。

判斷一個常量是否已經定義:defined()

define("PI",3.14);

$is1 = defined(‘PI‘);
$is2 = defined(‘PI1‘);

var_dump($is1); // boolean true
var_dump($is2); // boolean false

PHP中的常量分為自定義常量和系統常量

1. 自定義常量

在 PHP 中,用 define() 函數定義一個常量

技術分享

define("PI",3.14);
echo constant(‘PI‘);

define("GREETING","Hello world!",TRUE);
echo constant(‘greeting‘);

2. 系統常量

常見的系統常量有:

  1. __FILE__:php程序文件名。它可以幫助我們獲取當前文件在服務器的物理位置。

  2. __LINE__ :PHP程序文件行數。它可以告訴我們,當前代碼在第幾行。

  3. PHP_VERSION:當前解析器的版本號。它可以告訴我們當前PHP解析器的版本號,我們可以提前知道我們的PHP代碼是否可被該PHP解析器解析。

  4. PHP_OS:執行當前PHP版本的操作系統名稱。它可以告訴我們服務器所用的操作系統名稱,我們可以根據該操作系統優化我們的代碼。

  5. apache_get_version():Apache版本

  6. PHP_SAPI:運行方式

echo __FILE__; // E:\Web\Project\_wamp\demo.php
echo __LINE__; // 3
echo PHP_VERSION; // 5.6.25
echo PHP_OS; // WINNT

PHP 變量規則:

  • 在 PHP 中,沒有創建變量的命令,變量會在首次為其賦值時被創建。

  • 在 PHP 中,所有變量都對大小寫敏感,而對所有用戶定義的函數、類和關鍵詞的大小寫不敏感。

  • 變量以 $ 符號開頭,其後是變量的名稱

  • 變量名稱必須以字母或下劃線開頭,不能以數字開頭

  • 變量名稱只能包含字母數字字符和下劃線(A-z、0-9 以及 _)

PHP 變量的三種作用域:

PHP 在名為 $GLOBALS[index] 的數組中存儲了所有的全局變量。下標存有變量名。這個數組在函數內也可以訪問,並能夠用於直接更新全局變量。

global(全局作用域)

  • 函數之外聲明的變量擁有 global 作用域,只能在函數以外進行訪問。

local(局部作用域)

  • 函數之內聲明的變量擁有 local 作用域,只能在函數內部進行訪問。
  • 可以在不同的函數中創建名稱相同的局部變量,因為局部變量只能被創建它的函數所識別。
  • 如果要在函數內部使用全局變量,可以在變量前加 global 關鍵字。

static(靜態作用域)

  • 通常,當函數執行後,會刪除所有變量,不過,有時我需要不刪除某個局部變量。
  • 實現這一點需要在您首次聲明變量時使用 static 關鍵詞,但是該變量仍然是函數的局部變量。
  • 所以,每當函數被調用時,這個變量所存儲的信息都是函數最後一次被調用時所包含的信息。
$a = 10; // global

// 在函數內部直接使用全局變量
function f1() {
    echo $a;
}
f1(); // Undefined
echo $a; // 10

// 在函數內部運用 global 使用全局變量
function f2() {
    global $a; 
    echo $a;
}f2(); // 10

// 在函數內部運用 $GLOBALS[‘variable‘] 使用全局變量
function f3() {
    $GLOBALS[‘a‘] += 10;
    echo $GLOBALS[‘a‘];
}
f3(); // 20

// static
function f4() {
    static $a = 50;
    echo $a;
    $a++;
}
f4(); // 50
f4(); // 51
f4(); // 52

PHP 超全局變量

超全局變量 在 PHP 4.1.0 中引入,是在全部作用域中始終可用的內置變量,在函數或方法中無需執行 global $variable; 就可以訪問它們。

這些超全局變量是:

$GLOBALS

PHP 在名為 $GLOBALS[‘variable’] 的數組中存儲了所有全局變量。變量的名字就是數組的鍵。

$x = 1;
$y = 2;
function add() {
    $GLOBALS[‘z‘] = $GLOBALS[‘x‘] + $GLOBALS[‘y‘];
}
add();
echo $z; // 3

$_SERVER

$_SERVER 這種超全局變量保存關於報頭、路徑和腳本位置的信息。

能夠在 $_SERVER 中訪問的元素:http://www.w3school.com.cn/php/php_superglobals.asp

echo $_SERVER[‘SERVER_NAME‘];          // localhost

echo $_SERVER[‘HTTP_HOST‘];            // localhost

echo $_SERVER[‘PHP_SELF‘];         // /PHPDemo/demo.php

echo $_SERVER[‘SCRIPT_NAME‘];          // /PHPDemo/demo.php

echo $_SERVER[‘HTTP_REFERER‘];         // http://localhost/PHPDemo/

echo $_SERVER[‘HTTP_USER_AGENT‘];      // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

$_REQUEST

$_REQUEST 用於收集 HTML 表單提交的數據。

method=”GET” 和 method=”POST” 都適應

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form method="post" action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>">
        <input type="text" name="bxm">
        <input type="submit" value="提交">
    </form>
    <?php 
    $bxm = $_REQUEST[‘bxm‘];
    echo $bxm;
    ?>
</body>
</html>

$_POST

PHP $_POST 廣泛用於收集提交 method=”post” 的 HTML 表單後的表單數據。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form method="GET" action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>">
        <input type="text" name="bxm">
        <input type="submit" value="提交">
    </form>
    <?php 
    $bxm = $_REQUEST[‘bxm‘];
    echo $bxm;
    ?>
</body>
</html>

$_GET

PHP $_GET 廣泛用於收集提交 method=”get” 的 HTML 表單後的表單數據。

$_GET 也可以收集 URL 中的發送的數據。

<a href="demo.php?subject=PHP&web=W3school.com.cn">測試 $GET</a>

<?php 
$subject = $_GET[‘subject‘];
$web = $_GET[‘web‘];
?>

$_FILES

存儲各種與上傳文件有關的信息

<form method="post" action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>" enctype="multipart/form-data">
    <input type="file" name="myFile" value="" placeholder="">
    <input type="submit" name="" value="提交">
</form>

<?php 
echo $_FILES["myFile"]["name"] . "<br>";       // 頭像.png
echo $_FILES["myFile"]["size"] . "<br>";       // 142344
echo $_FILES["myFile"]["tmp_name"] . "<br>";               // D:\wamp64\tmp\phpFDC5.tmp
echo $_FILES["myFile"]["type"] . "<br>";       // image/png
echo $_FILES[‘myFile‘][‘error‘] . "<br>";      // 0
?>

$_ENV

PHP中的$_ENV是一個包含服務器端環境變量的數組。

var_dump($_ENV);

$_COOKIE

將用戶的會話數據存儲在客戶端瀏覽器

setcookie(‘test‘, ‘‘, time() -1);
ob_start(); // 打開輸出控制緩沖
print_r($_COOKIE); 

$content = ob_get_contents(); // 復制緩沖區內容到$content中
$content = str_replace(" ", ‘&nbsp;‘, $content);

ob_clean(); // 清空(擦掉)輸出緩沖區
header("content-type:text/html; charset=utf-8");
echo ‘當前的Cookie為:<br>‘;
echo nl2br($content); // nl2br 在字符串所有新行之前插入 HTML 換行標記 <br>

$_SESSION

將用戶的會話數據存儲在服務端

session_start(); // 創建一個 session
$_SESSION[‘sessionName‘] = ‘sessionValue‘;

echo "session_id:" . session_id() . "<br>"; // 顯示當前的session_id
echo $_SESSION[‘sessionName‘]; // 讀取 session 的值

unset($_SESSION[‘sessionName‘]); //銷毀一個session
var_dump($_SESSION);

PHP 變量的數據類型

在 PHP 中,支持8種原始類型,其中包括四種標量類型、兩種復合類型和兩種特殊類型。

PHP是一門松散類型的語言,不必向PHP聲明變量的數據類型,PHP會自動把變量轉換為自動的數據類型,一定程度降低了學習PHP的門檻。

1. 布爾類型(boolean)

TRUE 與 FALSE,不區分大小寫。

$flag = TRUE;

2. 整型(integer)

整型可以用十進制、八進制、十六進制指定。
- 十進制就是日常使用的數字
- 八進制,數字前必須加 0 ,如0123
- 十六進制,數字前必須加 0x ,如0x1a

3. 浮點型(float)

也就是通常說的小數,可以用小數點或者科學計數法表示。E代表的英文是exponent,指數的意思。

$num_float1 = 1.234;    //小數點
$num_float2 = 1.2e3;    //科學計數法,小寫e
$num_float3 = 7.0E - 10;     //科學計數法,大寫E

4. 字符串(string)

字符串型可以用三種方法定義:單引號形式雙引號形式Heredoc 結構形式。

單引號與雙引號的作用是有區別的: 雙引號解析變量,單引號不解析變量 。在沒有變量的時候最好使用單引號,速度比較快。

$var1 = ‘hello‘;
echo ‘$var1‘; // $var1
echo "$var1"; // hello

單引號與雙引號可以嵌套, 單雙、雙單會輸出。單單、雙雙需轉義

$str_string1 = ‘甲問:"你在哪裏學的PHP?"‘;
$str_string2 = "乙毫不猶豫地回答:‘當然是慕課網咯!‘";
$str_string3 = ‘甲問:\‘能告訴我網址嗎?\‘‘;
$str_string4 = "乙答道:\"www.imooc.com\"";

當字符串很長可以使用 Heredoc 結構形式,只要用了<<<之後用相同的字母作為起點和結尾就可以了。
heredoc 和 nowdoc:link

<?php 
$string1 = <<<GOD
我有一只小毛驢,我從來也不騎。
有一天我心血來潮,騎著去趕集。
我手裏拿著小皮鞭,我心裏正得意。
不知怎麽嘩啦啦啦啦,我摔了一身泥.
GOD;

echo $string1;
?>

5. 復合類型 — 數組(array)

數組是一個復合類型的變量,能夠在單獨的變量名中存儲一個或多個值。

$arr = array(); // 表示創建一個空數組,並把創建的空數組賦值給變量$arr。

$fruitArr1 = array("蘋果","香蕉","菠蘿");

$fruitArr2 = array("0"=>"蘋果", "1"=>"香蕉", "2"=>"菠蘿", "3"=>array("大葡萄","小葡萄"));

在 PHP 中,有三種數組類型:

索引數組 : 帶有數字索引的數組,鍵的順序是從0開始。創建方法:

$fruitArr = array("蘋果", "香蕉", "菠蘿");

for ($i = 0; $i < count($fruitArr); $i++) { 
    echo $fruitArr[$i];
}

關聯數組 : 帶有指定鍵的數組,自己分配給數組的指定鍵。創建方法:

$age = array("Bill" => "35", "Steve" => "37", "Peter" => "43");
$age[‘bxm‘] = ‘白小明‘;

foreach($age as $x => $x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "<br>";
}

多維數組 : 包含一個或多個數組的數組

$fruitArr = array(
    array("蘋果", 33, 20),
    array("香蕉", 17, 15),
    array("葡萄", 5, 2),
    array("橘子", 15, 11)
    );

// 獲得數組的長度 - count() 函數
for ($i = 0; $i < count($fruitArr); $i ++) {
    echo "<b>行數 $i</b>";
    echo "<ul>";

    for ($j = 0; $j < count($fruitArr[$j]); $j ++) {
     echo "<li>" . $fruitArr[$i][$j] . "</li>";
    }

    echo "</ul>";
}

6. 復合類型 — 對象(class)

在 PHP 中,必須明確地聲明對象。

首先我們必須使用 class 關鍵詞聲明對象的類。類是包含屬性和方法的結構。

然後我們在對象類中定義數據類型,然後在該類的實例中使用此數據類型:

class Car {
    var $color;

    function Car($color="green") {
        $this->color = $color;
    }

    function what_color() {
        return $this->color;
    }
}

7. 特殊類型 — 資源(resource)

資源是由專門的函數來建立和使用的,例如打開文件、數據連接、圖形畫布。

可以對資源進行操作(創建、使用和釋放)。

任何資源,在不需要的時候應該被及時釋放。如果我們忘記了釋放資源,系統自動啟用 垃圾回收機制 ,在頁面執行完畢後回收資源,以避免內存被消耗殆盡。

<?php
// f.txt文本文件保存時一定要設置為UTF-8格式,避免出現亂碼。
// open() 函數:打開文件,得到返回值的就是資源類型。
$file_handle = fopen("f.txt","r");

if ($file_handle){
    // 一行行地讀取文件,然後輸出每行的文字
    // feof() 函數:檢測是否已到達文件末尾。
    while (!feof($file_handle)) {
        // fgets() 函數:讀取一行文本
        $line = fgets($file_handle);
        //輸出一行文本
        echo $line;
        echo "<br />";
    }
}

// fclose() 函數:關閉文件,釋放資源
fclose($file_handle);

?>

8. 特殊類型—空類型(NULL)

NULL是空類型,對大小寫不敏感

NULL類型只有一個取值,表示一個變量沒有值,可以通過把值設置為 NULL,將變量清空

當被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認為為NULL。

<?php
    // 禁止顯示PHP警告提示
    error_reporting(0);

    $var;
    var_dump($var);

    $var1 = null;
    var_dump($var1);

    $var2 = NULL;
    var_dump( $var2);

    $var3 = "白小明";
    unset($var3);
    var_dump($var3);
?>

PHP 常量、PHP 變量全解析(超全局變量、變量的8種數據類型等)