日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【php基础入门】细说php的变量以及常量的知识点详解

發布時間:2023/12/10 113 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【php基础入门】细说php的变量以及常量的知识点详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

變量和常量詳解

    • 一、PHP 變量詳解
      • 1.1輸出語句
      • 1.2數據類型
        • 1.四種基本類型
        • 2.兩種復合類型
        • 3.兩種特殊類型
      • 1.3數據類型轉換
      • 1.4數據類型檢測
      • 1.5變量聲明創建
      • 1.6變量命名規則
      • 1.8變量賦值
      • 1.8相關函數
      • 1.9作用域
        • 局部變量與局部作用域
        • 全局變量與全局作用域
        • 預定義變量和靜態變量
          • 預定義變量(超全局變量)
          • 靜態變量 (static)
    • 二、PHP 常量詳解
      • 2.1常量的聲明與使用
      • 2.2預定義常量和魔術常量
        • 預定義常量
        • 魔術常量


前言:混一天和努力一天,一天看不出任何差別,三天看不到任何變化,七天也看不到任何距離…… 但是一個月后會看到話題不同,三個月后會看到氣場不同,半年后會看到距離不同,一年后會看到人生道路不同。

一、PHP 變量詳解

變量就是臨時存儲值的容器,它可以儲存數字、文本、或者一些復雜的數據等。變量的值在程序運行中會隨時發生變化,能夠為程序中準備使用的一段數據起一個簡短容易記的名字,另外它還可以保存用戶輸入的數據或運算的結果。

1.1輸出語句

在PHP中,可以使用echo 、 print 、 print_r 、 printf 、 sprintf 、 var_dump六種語句來實現輸出。

  • echo語句
    echo() 實際上不是一個函數,是php語句,因此您無需對其使用括號。不過,如果您希望向 echo() 傳遞一個以上的參數,那么使用括號會發生解析錯誤。而且echo是返回void的,并不返回值,所以不能使用它來賦值。
  • <?php echo "words"; echo ("words"); echo ("apple","bear"); //發生錯誤,有括號不能傳遞多個參數echo "alice","bill","cart", "daring"; // 不用括號的時候可以用逗號隔開多個值, 會輸出 alicebillcartdaring 不管是否換行,最終顯示都是為一行$fistname="alice"; echo "$fistname com"; // 如果 $firstname = "alice", 則會輸出 alice com.echo '$firstname com'; // 由于使用單引號,所以不會輸出$firstname的值,而是輸出 $firstname com// 這里注意,后面會學到,單引號不能解析變量$a = echo("words"); // 錯誤!不能用來賦值 ?>

    說明:在平時,echo或echo()的輸出是一樣的,只有在將多個參數傳遞給echo語句,進行輸出時,則使用括號將生成解析錯誤。

  • print語句
    print() 和 echo() 用法一樣,但是echo速度會比print快一點點。實際上它也不是一個函數,因此您無需對其使用括號。print語句也可以實現輸出,且有返回值。當輸出成功會返回1,失敗就會返回0;因此它可以在表達式中使用。
  • <?php print "hello "print ("world!");echo print "hello"; ?>
  • printf()函數
    printf()函數也可以實現輸出,可以輸出普通的字符串,也格式化輸出字符串。例:
  • <?php // printf(格式模板,數據……) $a=20; $b=30; printf("輸出: a=%d,b=%d,%1\$d+%2\$d=%d",$a,$b,$a+$b); // 輸出:a=20,b=30,20+30=50printf("My name is %s %s。","alice", "com"); // My name is alice com。 printf("My name is %1\$s %1\$s","alice", "com"); // 在s前添加1\$或2\$.....表示要顯示后面第幾個參數位置,此行輸出 My name is alice alice因為只顯示第一個參數兩次。 printf("My name is %2\$s %1\$s","alice", "com"); // My name is com alice ?>
    • %% – 返回百分比符號
    • %b – 二進制數
    • %c – 依照 ASCII 值的字符
    • %d – 帶符號十進制數
    • %e – 科學計數法(比如 1.5e+3)
    • %u – 無符號十進制數
    • %f – 浮點數(local settings aware)
    • %o – 八進制數
    • %s – 字符串
    • %x – 十六進制數(%x小寫字母%X大寫字母)
  • sprintf函數
    此函數使用方法和printf一樣,唯一不同的就是該函數把格式化的字符串寫寫入一個變量中,而不是輸出來。(他不會輸入內容,而是返回格式化的字符串)
  • <?php // 有時我們只想要將格式化后的字符串保存起來,而不是打印輸出 // 這時候就用到了sprintf() // pdo:dsn,'mysql:host=localhost;dbname=phpedu;' $type = 'mysql'; $host = 'localhost'; $dbname = 'phpedu'; $linkParams = [$type,$host,$dbname]; // 直接格式化輸出 printf('%s:host=%s;dbname=%s;',$type,$host,$dbname); // vprintf()支持數組參數 vprintf('%s:host=%s;dbname=%s;',$linkParams); // mysql:host=localhost;dbname=phpedu; // 直接返回格式化字符串不輸出 $dsn = sprintf('%s:host=%s;dbname=%s;',$type,$host,$dbname); $dsn = vsprintf('%s:host=%s;dbname=%s;',$linkParams); echo $dsn; ?>
  • print_r 函數
    print_r()函數是用來輸出變量的,可以用人類容易讀取的格式來顯示這個變量的信息。
  • print_r有兩個參數,第一個是變量,第二個可設為true,如果設為true,則會返回字符串,否則返回布爾值TRUE。

    <?php$a="alice";$c = print_r($a); // 打印alice 返回布爾值true echo $c; // $c的值是TRUE// 第二個參數設置為true 可以將變量的信息轉換成一個字符串 不輸出到瀏覽器 用于線上調試,sql日志記錄 $c = print_r($a,true); // 不打印,返回字符串內容 echo $c; // $c的值是字符串alice$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));echo "</pre>"; print_r ($a); echo "</pre>"; ?>

  • var_dump()函數
    var_dump()函數用于輸出變量的內容、類型、長度,可以顯示變量的結構化信息,例如:類型、值。常用來開發階段的代碼調試。
  • <?php $var_name=array(99,'w3resource',67899.99, array('X','Y',1));var_dump($var_name);$passed = true;// 直接echo 讓會將布爾值轉換為字符串輸出為1echo $passed; // 1// 打印實際值echo var_export($passed,true); // true// 打印類型echo gettype($passed); // booleanecho gettype(gettype($passed)); // string// var_dump() 可以同時打印值和類型var_dump($passed); ?>

    輸出方式總結:

    • echo 可以輸出數字型和字符型。輸出布爾型的時候,true輸出的結果是1,false輸出的結果是空
    • printf 可以輸出數字型、字符型、布爾型。輸出布爾型的時候,true輸出的結果為1,false輸出的結果為0。
    • print_r可以輸出數字型、字符型、布爾型和數組。輸出布爾型的時候,true輸出的結果為1,false輸出的結果為空;輸出數組是以‘鍵’=>‘值’的形式。
    • var_dump() 判斷一個變量的類型與長度,并輸出變量的數值,如果變量有值輸的是變量的值并回返數據類型。此函數顯示關于一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。
    • die() 有兩個功能:先輸出內容,然后退出程序。一般用于數據庫連接的判斷,一旦執行die()后面的內容將不執行。
      mysql_connect(“locahost”,“root”,“root”) or die(“鏈接服務器失敗!”);

    ob_clean() 為一個可以清空輸出緩沖區內容的內置函數
    file_put_contents(‘log.text’,$res);函數把一個字符串寫入文件中

    <?php //下面輸出的 hello 會被加入緩存區 echo 'hello'; //清空緩存區的內容,上面的 hello 不會再次輸出 ob_clean(); echo "world!";$arr = ["id"=>1,"name"=>"zhang","gender"=>"man",age=>18]; $res = print_r($arr,true); file_put_contents('log.text','寫入數組信息'.$res); echo "<pre>".print_r($arr,true)."</pre>"; ?>

    1.2數據類型

    PHP 中的數據類型可以分為三大類,分別是標量數據類型、復合數據類型和特殊數據類型

    類型成員
    基本類型布爾,字符串,數值(整數和浮點數)
    復合類型數組, 對象
    特殊類型null, 資源, 回調,閉包

    1.四種基本類型

    • 整數型(integer)
    • 浮點數型(float)
    • 布爾型(boolean)
    • 字符串(string)
    類型功能
    string字符串是連續的字符序列
    integer整型包含所有的整數,可以是正數也可以是負數
    float浮點型表示整數外它還可以用來表示小數和指數
    boolean布爾型
    <?php//雙引號方式聲明字符串$str1 = "PHP 學習"; //單引號方式聲明字符串$str2 = '輸出 hello world!'; // 字符串的拼接(用點 . 拼接字符串)echo $str1.$str2; // PHP 學習輸出 hello world!// 當字符串內部包含雙引號或單引號與定界符沖突時// 我們可以將定界符改為單引號echo '你好 “zhang”!'; // 你好 “zhang”!// 使用反引號轉義字符echo "你好\"zhang\"!"; // 你好"zhang"!echo "C:\\web\\table\\index.html";// 注意:單引號只能識別2個轉義字符 \' , \\// 單雙引號區別:字符轉移、變量解析、運行速度。// 定義一個整型數據類型的變量$x = 5985; // 輸出此變量 var_dump($x); // int(5985)// 八進制 十六進制 二進制var_dump(0745,0x5ac,0b11011); // int(485) int(1452) int(27)// 定義一個浮點型變量$num1 = 3.1415926; var_dump($num1); // float(3.1415926)var_dump(5.6e3); // float(5600) 科學計算法// 定義一個布爾型為假的變量$y = faLse;var_dump($y); // bool(false)// 標量類型$int = 18;$float = 18.88;$bool = false;$str = 'hello world!'; ?>

    2.兩種復合類型

    • 數組(array)
    • 對象(object)

    數組是一組數據的集合,是將數據按照一定規則組織起來形成的一個整體。數組的本質是存儲管理和操作一組變量。按照數組的維度劃分,可以有一維數組、二維數組和多維數組。我們可以使用 array() 函數來創建數組。

    // array數組 array(鍵(key)=>值(value),鍵(key)=>值(value),……) // 默認索引 0 1 2 3(索引數組) $arr1 = [12,13,18,62,85];// 指定數組的鍵 也就是索引.類似于js中的對象字面量(關聯數組) $arr2 = ["id"=>1,"name"=>"zhang","age"=>18,"gender"=>'man']; $user = array("id"=>1,"name"=>"zhang","age"=>18,"gender"=>'man');var_dump($arr1,$arr2); // array(5) { [0]=> int(12) [1]=> int(13) [2]=> int(18) [3]=> int(62) [4]=> int(85) } // array(3) { ["id"]=> int(1) ["name"]=> string(5) "zhang" ["age"]=> int(18) ["gender"]=> string(man) }$arr = array('a','b','c','d','e'); // 在最后增加一項 $arr[] = "f"; // 打印數組 vprintf('Array ( [0] => %s [1] => %s [2] => %s [3] => %s [4] => %s [5] => %s ) ',$arr); // 輸出效果一樣 用于打印數組 print_r($arr); // Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f ) echo $arr[0],'<br >'; // a echo $arr[1],'<br >'; // b echo $arr[5],'<br >'; // f// 遍歷索引數組 for($i=0;$i<count($arr);$i++) {echo $arr[$i],'<br >'; }// foreach是專門用來循環數組的 foreach ($variable as $key => $value) {# code... } // foreach 里面的鍵值的變量名($k,$v) 為任意合法的變量名 $arr = array('name'=>'zhangsan' , 'age'=>24 , 'area'=>'Beijing'); foreach($arr as $k=>$v) {echo $k,':',$v,'<br >'; } // 注意:我們可以省略其中的鍵,只打印值,但無法只打印鍵 // array_keys — 返回數組中所有的鍵名 print_r(array_keys(arr2)); // 返回鍵名組成的數組

    對象(Object)可以用于存儲數據。在 PHP 中對象必須聲明。首先必須使用 class 關鍵字聲明類對象。類是可以包含屬性和方法的結構。然后在類中定義數據類型,在實例化的類中使用數據類型。

    在支持面向對象的語言中,可以把各個具體事物的共同特征和行為抽象成一個實體,稱之為一個“類”,而對象是類使用 new 關鍵字實例化后的結果。

    class Car //使用 class 聲明一個類對象{private $color; // 變量=》屬性// 函數=》方法public function setCar($color="black") {// $this 表示當前對象$this->color = $color;}public function getColor() {return $this->color;}}$car1 = new Car(); // 實例化對象// 實例化名稱->成員屬性方法$car1->setCar('red'); // 設置$color的值redecho $car1->getColor(); // 獲取$color的值 red$car2 = new Car();$car2->setCar();echo $car2->getColor(); // black

    3.兩種特殊類型

    • 空值 NULL
    • 資源 (resource)
    // NULL 在 PHP 中是一種特殊的數據類型,它只有一個值,即 NULL,表示空值(變量沒有值),需要注意的是它與空格的意義不同 // 他并不表示空格,空字符串,零,null不區分大小寫NULL $str = NULL; var_dump($str); $username = 'zhang'; unset($username); // 釋放變量 @var_dump($username); // @錯誤抑制符// (resource) 資源類型 保存到外部資源的一個引用 // fopen() header("content-type:text/html;charset=utf-8");//設置編碼,解決中文亂碼 $file = fopen("log.txt", "rw");//打開test.txt文件 var_dump($file); // resource(3) of type (stream) 3是資源類型id stream資源類型// imagecreate() $image_handle = imagecreate(100,50); var_dump($image_handle); // resource(2) of type (gd)

    1.3數據類型轉換

    PHP數據類型轉換分為自動轉換(隱式轉換)和強制轉換(顯示轉換),強制轉換又分為臨時轉換和永久轉換。

    轉換方式函數
    臨時轉換(int),(string),(array),(object)…
    強制轉換settype(數據,類型)
    自動轉換根據操作符對操作數的類型要求進行
  • 臨時轉換:用戶
    臨時轉換用小括號的形式,我們可以通過(int)都是這樣的形式轉換成整型,或者轉換成浮點型(boolean)縮寫(bool),還可以轉換成數組,(array)的形式轉換成數組,還可以轉換成對象。
  • <?php $var=123; var_dump((string)$var); // 用string關鍵字 實現 var_dump($var); // int(123) $res=strval($var);//通過strval函數實現 var_dump($res); // string(3) "123" // 臨時轉換并不會改變原數據的類型// http://zhang.com/php/0426/demo.php?id=3&p=5 var_dump($_GET['id']); // 這里看到id是個字符串,url中的內容全部默認是字符串 // 我們將其臨時轉換為整數,方便運算 $id = (int)$_GET['id']; if($id === 3){echo "查找成功!"; }$myAge = 18;var_dump($myAge,(string)$myAge,(float)$myAge);var_dump((array)$myAge,((array)$myAge)[0]); ?>
  • 永久轉換:只針對變量
  • <?php $var=12; var_dump($var); // int(12) settype($var, 'string'); var_dump($var); // string(2) "12"$s = true; var_dump($s); // bool(true) settype($s,"int"); var_dump($s); // int(1)$s = 32; var_dump($s); // int(32) settype($s,"array"); var_dump($s); // array(1) { [0]=> int(32) } // 字符串轉換數組意義不大,字符串本身就可以當數組使用 $str = "admin"; echo $str[0],$str[1]; // ad // 轉對象,默認屬性名scalar var_dump(((object)$str)->scalar); ?>

    臨時轉換和永久轉換總結

    <?php //臨時轉換 $var = true; var_dump($var); $res = (int)$var; var_dump($res); var_dump((int)$var, (integer)$var); echo "<br>";//臨時轉換成浮點型 var_dump((float)$var, (double)$var, (real)$var); echo "<br>";$var = 3.6; //舍掉小數部分 var_dump((int)$var, (integer)$var); echo "<br>";//臨時轉換成字符串型 $var = true; var_dump((string)$var); echo "<br>";//臨時轉換成布爾類型 $var = "3xuxiaoke"; var_dump((bool)$var, (boolean)$var); echo "<br>";//臨時轉換成空 $var = "空"; var_dump((unset)$var); echo "<br>";//臨時轉換成數組 $var = 123; var_dump((array)$var); echo "<br>";//臨時轉換成對象 $var = 12.3; var_dump((object)$var); echo "<br>";//通過系統函數完成臨時轉換(類型+val()) $var = "3xuxiaoke"; $res = intval($var); var_dump($res); echo "<br>";var_dump(floatval($var), doubleval($var)); echo "<br>";echo "<hr/>";//永久轉換------------------------------------ $var = 123;var_dump($var); echo "<br>";echo gettype($var); echo "<br>";$var = true;echo gettype($var); echo "<hr/>";$var = 123; var_dump($var); echo "<br>";settype($var, "boolean"); var_dump($var); echo "<br>";/*type 的可能值為: “boolean” (或為“bool”) “integer” (或為“int”) “float” (或為“double”) "string" "array" "object" “null” */$var = "3xuxiaoke"; echo settype($var, "int")."</br>"; echo floatval($var)."</br>"; echo gettype($var)."</br>";// settype(數據,類型) 設置類型 gettype(數據) 獲取類型
  • 自動轉換:系統
    程序會根據上下文環境自動進行轉換
    其它類型轉換成布爾型
    • 0>-false
    • 0.0>-false
    • 空字符串“或者”或者“0”或者“0”>-false
    • null>-false
    • 空數組array()>-false
    <?php // "+"要求參與計算的數據都是數值類型,如果不是,就會觸發自動轉換 echo 123+"456"; // 579 echo 123+(int)"456"; // ====> 579// "."字符串拼接,希望兩邊都是字符串 echo "php". 123 ."cn"; // php123cn echo "php" . (string)123 . "cn";// 最常用的自動轉換,一般用于布爾轉換,有則為真,無則為假 if(!$email) echo "郵箱未定義"; // 未定義為NULL 會自動轉換為false$a = '100abc'; // “100abc”==>100 非數字開頭 "abc100"==>0 $b = 5; echo "類型為".gettype($a+$b)."值為".($a+$b); // integer 105@$res = null + '10 kg rice'; var_dump($res); // int(10)$s = 10; var_dump($s.'kg rice'); // string(9) "10kg rice" ?>

    1.4數據類型檢測

    在JavaScript中,使用typeof可以檢測基本數據類型,使用instanceof可以檢測引用數據類型。在PHP中,也有檢測數據類型的方法,具體如下:

  • 輸出變量的數據類型(gettype)
  • <?php $arry = array('a','b','c'); echo gettype($arry); //array ?>
  • 輸出變量的數據類型、包含的數量以及具體內容(var_dump)
  • <?php $str = 'hello world'; var_dump($str);//string(11) "hello world" ?>
  • 檢測某個變量是否是指定的數據類型(is_double、is_array、is_int、is_string等),假如結果為真返回1,為假就會返回空。
  • 類型函數
    標量is_int(),is_string(),is_bool()…
    復合is_array(),is_object()
    特殊is_null(),is_resource()

    <?php $num = 123; if(is_array($num)){ echo '這是一個數組'; }else if(is_string($num)){ echo '這是一個字符串'; }else if(is_int($num)){ echo '這是一個整數'; }else if(is_double($num)){ echo '這是一個浮點數'; } /*function sum1($a,$b){if(is_int($a) && is_int($b)){return sprintf('%d + %d = %d </br>',$a,$b,($a+$b));}else if(is_float($a) && is_float($b)){return sprintf('%f + %f = %f </br>',$a,$b,($a+$b));}else if(is_numeric($a) && is_numeric($b)){return sprintf('%f + %f = %f </br>',$a,$b,($a+$b));}else{return "非法數值";}}*/// php7+:參數類型檢測,支持復合類型,也支持標量function sum1(float $a,float $b):string{return sprintf('%s + %s = %s </br>',$a,$b,($a+$b));}echo sum1(10,15); // 10 + 15 = 25echo sum1("10",15.845); // 10 + 15.845 = 25.845echo sum1("ab",6); // 非法數值/* is_numeric() 檢測是否為數值字符串is_int() 檢測是否為整型is_float() 檢測是否為浮點型is_string() 檢測是否為字符串is_bool() 檢測是否為布爾is_array() 檢測是否為數組is_object() 檢測是否為對象is_null() 檢測是否為Nullis_resource() 檢測是否為資源is_scalar() 檢測是否為標量類型 (字符串、數值、布爾)*/var_export(is_scalar(12)); // truevar_export(is_scalar([1,2,3])); // falsevar_export(is_scalar(null)); // false ?>

    1.5變量聲明創建

    因為 PHP 是一種弱類型的語言,所以使用變量前不用提前聲明,變量在第一次賦值時會被自動創建,這個原因使得 PHP 的語法和C語言、Java 等強類型語言有很大的不同。

    聲明 PHP 變量必須使用一個美元符號“$”后面跟變量名來表示,然后再使用“=”給這個變量賦值。如下所示:

    <?php$a = 1;$b = 2;$c = 3;echo $a.', '.$b.', '.$c; // 1,2,3 ?>

    1.6變量命名規則

    變量名并不是可以隨意定義的,一個有效的變量名應該滿足以下幾點要求:

    • 變量必須以 $ 符號開頭,其后是變量的名稱,$ 并不是變量名的一部分;
    • 變量名必須以字母或下劃線開頭;
    • 變量名不能以數字開頭;
    • 變量名只能包含字母(Az)、數字(09)和下劃線(_);
    • 與其它語言不同的是,PHP 中的一些關鍵字也可以作為變量名(例如 true、true、truefor)。
    • 標識符分為:預定義(保留字、關鍵字,class,public)和自定義的。

    注意:PHP 中的變量名是區分大小寫的,函數名不區分大小寫,因此 $var 和 $Var 表示的是兩個不同的變量。

    $_str = "PHP是世界上最好的語言"; // 變量名為:_str,變量值為:PHP是世界上最好的語言

    當使用多個單詞構成變量名時,可以使用下面的命名規范:

    • 下劃線命名法:將構成變量名的單詞以下劃線分割,例如 getusername、get_user_name、getu?sern?ameset_user_name;
    • 駝峰式命名法(推薦使用):第一個單詞全小寫,后面的單詞首字母小寫,例如 getUserName、getUserName、getUserNamegetDbInstance;
    • 帕斯卡命名法:將構成變量名的所有單詞首字母大寫,例如 Name、Name、NameMyName、$GetName。

    1.8變量賦值

    就是用不同的名字訪問同一個變量內容。當改變其中任何一個變量的值,另一個也會發生變化。引用賦值使用“&”來表示引用。

    <?php //php引用變量:不同變量名指向同一地址// 傳值賦值 //定義一個變量a,此時內存開辟了一塊區域,$a指向該區域 $a = 100; //定義變量b,將a變量的值賦值給b,此時該區域有兩個變量($a和$b)指向。 $b = $a; printf("a=%d,b=%d",$a,$b); // a=10 b=10//修改$a變量的值,php變量具有Copy On Write的特性,所以會復制并重寫a所指向的區域值,此時a和b分別指向不同區域。 $a = 10; printf("a=%d,b=%d",$a,$b); // a=10 b=100// ------------------------// 引用賦值 &地址引用符 $c = 100; $d = &$c; $c = 10; printf("c=%d,d=%d",$c,$d); // c=10 d=10 //當引用指向時,php變量不在具有Copy On Write特性,且指向同一內存區域,無論$c或$d誰變化,另外一個都會變化unset($c); // 僅僅是將$c與$d取消關聯,$d依然可以用 var_dump($d); // int(10)// -------------------------------// 可變變量 使用兩個美元符號($) $a = "hello"; $$a = "world"; var_dump($a); // string(5) "hello" var_dump($hello); // string(5) "world" // 兩個變量都被定義了:$a 的內容是“hello”,并且 $hello 的內容是“world”。 // 因此,可以表述為:echo “$a ${$a}”;或者 echo “$a $hello”;它們都會輸出:hello world

    1.8相關函數

    • ob_clean() 為一個可以清空輸出緩沖區內容的內置函數
    • file_put_contents() 函數把一個字符串寫入文件中
    • unset() 函數用于銷毀釋放給定的變量
    • die(“字符串”)和exit(“字符串”)都是中止腳本執行函數
    • isset()與empty() 用來檢測變量是否聲明和是否為空
    $arr = [1,2,3,4]; var_dump($arr); $res = print_r($arr,true); // 不打印直接返回數組內容 file_put_contents("log.txt",$res); // 將數組內容存儲到log.txt中ob_clean(); // 清空輸出緩沖區內容的內置函數 // 上面的內容將不會輸出// 銷毀單個變量 unset ($foo); // 銷毀單個數組元素 unset ($bar['quux']); // 銷毀一個以上的變量 unset($foo1, $foo2, $foo3);// 輸入信息終止后面程序 exit('123'); // 輸出123 die('1234'); // 輸出1234 $fp = @fopen("./readme.txt","r") or die("不能打開該文件!!!"); // 這種情況下,如果fopen函數被調用返回布爾值false時,die()將立即終止腳本,并馬上打印, 傳遞給它的字符串,“死前還能說一兩句話”。// isset() 判斷變量是否聲明并且不是 NULL // 若變量存在并且值不為null才返回true 否則返回falsevar_export(isset($username)); // 變量未定義 false$username = "zhang";var_export(isset($username)); // true // 使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSEunset($username); // nullvar_export(isset($username)); // falseecho !isset($username)?'變量未被檢測到':'變量已定義';// empty()檢測變量是否為空(為空返回true 不為空 返回false)var_export(empty(18)); // 不為空 falsevar_export(empty(""),empty(0),empty(NULL),empty(false)); // 變量為空 bool(true) bool(true) bool(true) /* 使用 empty 判斷以下變量時,會被認為是空的: "" (空字符串) 0 (作為整數的0) 0.0 (作為浮點數的0) "0" (作為字符串的0) NULL FALSE array() (一個空數組) *///------------------

    1.9作用域

    變量的作用范圍(可以被使用的范圍)稱為變量作用域,變量必須在其有效范圍內使用,如果超出有效范圍,變量就會失去其意義。按作用域可以將 PHP 變量分為全局變量和局部變量兩種。

    可以在當前源碼中任何地方(函數外部)使用的變量稱為全局變量,它們具有全局作用域;只能在對其進行定義的函數內部使用的變量稱為局部變量,它們具有局部作用域。

    局部變量與局部作用域

    局部變量就是在函數的內部定義的變量,它只能在定義它的函數內使用。局部變量會在函數調用結束時自動銷毀。

    <?phpfunction example(){$a = "php中文網"; // 在函數內定義變量 aecho "局部變量 a 的值為:".$a."<br>";}example();if(isset($a)){ // 在函數外部調用 $a,如果 $a 存在則會打印下面的內容echo "在函數外部調用函數內的局部變量 a,其值為:".$a;} // 只打印了函數體內的 “局部變量 a 的值為:php中文網” ?>

    全局變量與全局作用域

    全局變量就是定義在所有函數以外的變量,其作用域是當前源碼的任何地方,但是在函數內部是不可用的。在程序運行期間全局變量會一直存在,只有程序結束運行時才會被銷毀。

    <?php$a = "php中文網"; // 在函數外部定義全局變量 afunction example(){if(isset($a)){echo "在函數內部調用全局變量 a,其值為:".$a;}}example();echo "在函數外部調用全局變量 a,其值為:".$a; // 只打印了函數體外的 “在函數外部調用全局變量 a,其值為:php中文網” // 通過運行結果可以看出,在函數內部并沒有成功調用到 $a,但是在函數外部可以。// -------------在函數體內使用外部全局變量 // 1. 在函數體內調用全局變量需要使用global關鍵字引用function example(){global $a; // 在函數體內通過global關鍵字引用外部全局變量if(isset($a)){echo "在函數內部調用全局變量 a,其值為:".$a;}} // 2.使用超全局變量$GLOBALS['variable']function example(){if(isset($GLOBALS['a'])){echo "在函數內部調用全局變量 a,其值為:".$GLOBALS['a'];}} ?>

    預定義變量和靜態變量

    預定義變量(超全局變量)

    預定義變量又叫超全局變量,它們不需要提前聲明就可以在所有的作用域中使用。通過這些預定義變量可以獲取用戶會話、用戶操作系統的環境和本地操作系統的環境等信息。

    常用的預定義變量如下所示:

    • $GLOBALS:全局作用域中的全部可用變量;
    • $_SERVER:服務器和執行環境的信息;
    • $_REQUEST:包含了 GET,_GET,G?ET_POST 和 $_COOKIE 的所有信息;
    • $_POST:通過 POST 方法提交的數據;
    • $_GET:通過 GET 方法提交的數據;
    • $_FILES:通過 POST 方式上傳到服務器的文件數據;
    • $_ENV:通過環境方式傳遞給當前腳本的變量組成的數組;
    • $_COOKIE:通過 HTTP Cookies 方式傳遞給當前腳本的變量所組成的數組;
    • $_SESSION:當前腳本可用 SESSION 變量組成的數組。

    $GLOBALS 是一個包含了全局作用域中所有變量的數組,變量的名字就是數組的鍵。

    <?php$name = 'php中文網';$title = 'PHP 預定義變量';function demo(){static $str = 'PHP 教程';$url = 'http://www.php.cn';}echo "<pre>";var_dump($GLOBALS);echo "</pre>"; /* array(7) {["_GET"]=>array(0) {}["_POST"]=>array(0) {}["_COOKIE"]=>array(0) {}["_FILES"]=>array(0) {}["GLOBALS"]=>array(7) {["_GET"]=>array(0) {}["_POST"]=>array(0) {}["_COOKIE"]=>array(0) {}["_FILES"]=>array(0) {}["GLOBALS"]=>*RECURSION*["name"]=>string(12) "php中文網"["title"]=>string(19) "PHP 預定義變量"}["name"]=>string(12) "php中文網"["title"]=>string(19) "PHP 預定義變量" } // 注意:$GLOBALS 中并不包含函數中的局部變量和靜態變量。 */ ?>
    靜態變量 (static)

    靜態變量是一個特殊的局部變量,通過前面的學習我們知道,在函數內部定義一個局部變量,函數調用結束之后這個變量就會被銷毀,不能繼續使用了。而靜態變量不同,靜態變量在初始化之后,會在程序運行期間會一直存在。

    和局部變量相比,靜態變量具有一下特點:

    • 當函數執行完畢后,靜態變量不會消失;
    • 靜態變量只能在函數內部使用;
    • 靜態變量只會被初始化一次;
    • 靜態變量初始化的值可以省略,默認值為 null;
    • 靜態變量的初始值只能是具體的字符串、數值等,而不能是一個表達式。

    定義靜態變量需要用到 static 關鍵字了,使用方法如下:

    static 變量 = 值;

    定義一個靜態變量來記錄函數調用的次數,另外再定義一個局部變量與靜態變量做對比,具體代碼如下:

    <?php// 靜態變量并不是說它的值是不能改變的,不能改變值的那叫常量。 其實靜態變量的值是可以改變的,而且它會保持最新的值。之所以稱為靜態,是因為它不會隨著函數的調用和退出而發生變化。即上次調用函數的時候,如果我們給靜態變量賦予某個值的話,那么下次函數調用時,這個值是保持不變。function demo(){static $a = 0;$b = 0;$a++;$b++;echo '第 '.$a.' 次運行 demo 函數, 局部變量 $b 的值為:'.$b.'<br>';}demo();demo();demo();demo(); /* 第 1 次運行 demo 函數, 局部變量 $b 的值為:1 第 2 次運行 demo 函數, 局部變量 $b 的值為:1 第 3 次運行 demo 函數, 局部變量 $b 的值為:1 第 4 次運行 demo 函數, 局部變量 $b 的值為:1 */ ?>

    二、PHP 常量詳解

    所謂常量就是不能改變的量,PHP 中常量一旦被定義,就不能被修改或取消定義。

    PHP 常量通常用來存儲一個不被改變也不希望變化的數據,該數據只能是四種標量數據類型的數據:整型、浮點型、字符串、布爾型,不過從 PHP7 開始常量支持了數組(array)類型。

    與變量相比,常量具有以下幾個特點:

    • 常量前面沒有美元符號($);
    • 常量只能用 define() 和 const 定義;
    • 常量、類、接口、函數的作用域都是全局的;
    • 常量一旦被定義就不能被重新定義或者取消定義。
    • 常量名稱推薦全部為大寫字母

    2.1常量的聲明與使用

    • define(): 函數
    define("NATION","中國"); define("AGE",18);
    • const: 關鍵字
    const NAME = 'zhangshuai'; const GENDER = "man"; $user = sprintf('姓名:%s,性別:%s,年齡:%d,國籍:%s',NAME,GENDER,AGE,NATION); echo $user; // 姓名:zhangshuai,性別:man,年齡:18,國籍:中國// 類中定義常量只能使用const關鍵字 class User{// 常量必須初始化賦值const APP_PATH = '0426/demo.php'; }

    2.2預定義常量和魔術常量

    預定義常量

    定義常量顧名思義也就是 PHP 中預先定義好的常量,使用這些預定義常量可以幫助我們來獲取一些 PHP 中的信息,比如,我們可以使用預定義常量來獲取當前電腦的操作系統,當前使用的 PHP 版本信息等等。另外需要注意的是預定義常量是區分大小寫的。

    查看系統預定義常量:echo "<pre>".print_r(get_defined_constants(true),true)."</pre>";

    下面列舉了一些 PHP 中的預定義常量:

    • PHP_VERSION:當前 PHP 的版本號;
    • PHP_OS:當前的操作系統名稱;
    • PHP_EOL:系統換行符,Windows 是(\r\n),Linux 是(\n),MAC 是(\r);
    • PHP_INT_MAX:當前 PHP 支持的最大整數;
    • PHP_INT_MIN:當前 PHP 支持的最小整數;
    • PHP_EXTENSION_DIR:PHP 的擴展目錄;
    • TRUE:布爾類型的 true;
    • FALSE:布爾類型的 false;
    • NULL:Null 值。
    // 僅設置當前腳本中的error_reporting()函數調用的后面區的域錯誤報告級別 error_reporting(E_ALL)// 參數可以是整型或對應的常量標識符,推薦使用常量的形式// 使用 error_reporting(0) 或者在函數前面加 @,可以抑制錯誤輸出,以防止錯誤消息泄露敏感信息。

    魔術常量

    魔術常量屬于特殊的預定義常量,這些常量可以根據它們的使用位置而變化。魔術常量通常以兩個下劃線__開頭,并以兩個下劃線__結尾。

    PHP 中魔術常量有八個,如下所示:

    • __LINE__ :文件中的當前行號;
    • __FILE__:當前文件的絕對路徑(包含文件名);
    • __DIR__:當前文件的絕對路徑(不包含文件名),等價于 dirname(__FILE__);
    • __FUNCTION__:當前函數(或方法)的名稱;
    • __CLASS__:當前的類名(包括該類的作用區域或命名空間);
    • __TRAIT__:當前的 trait 名稱(包括該 trait 的作用區域或命名空間);
    • __METHOD__:當前的方法名(包括類名);
    • __NAMESPACE__:當前文件的命名空間的名稱。

    注意:與預定義常量不同,魔術常量是不區分大小寫的。

    <?phpecho "<br/>當前文件的根路徑:".__dir__;echo "<br/>當前文件的路徑:".__FILE__;echo "<br/>當前的行數:".__LINE__;echo "<br/>當前PHP的版本信息:".PHP_VERSION;echo "<br/>當前的操作系統:".PHP_OS; /* 當前文件的根路徑:E:\zhang\0426 當前文件的路徑:E:\zhang\0426\demo.php 當前的行數:4 當前PHP的版本信息:7.2.31 當前的操作系統:WINNT */ function getName(){echo "<br>當前函數名稱:".__FUNCTION__; } getName(); // 當前函數名稱:getNameclass Person{public function walk(){echo "當前類名為 ".__CLASS__;echo "當前類名和方法名為 ".__METHOD__;} } $zhang = new Person; $zhang->walk(); // 當前類名為 Person 當前類名和方法名為 Person::walk ?>

    總結

    以上是生活随笔為你收集整理的【php基础入门】细说php的变量以及常量的知识点详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。