日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

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

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

變量和常量詳解

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


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

一、PHP 變量詳解

變量就是臨時(shí)存儲(chǔ)值的容器,它可以儲(chǔ)存數(shù)字、文本、或者一些復(fù)雜的數(shù)據(jù)等。變量的值在程序運(yùn)行中會(huì)隨時(shí)發(fā)生變化,能夠?yàn)槌绦蛑袦?zhǔn)備使用的一段數(shù)據(jù)起一個(gè)簡(jiǎn)短容易記的名字,另外它還可以保存用戶輸入的數(shù)據(jù)或運(yùn)算的結(jié)果。

1.1輸出語句

在PHP中,可以使用echo 、 print 、 print_r 、 printf 、 sprintf 、 var_dump六種語句來實(shí)現(xiàn)輸出。

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

    說明:在平時(shí),echo或echo()的輸出是一樣的,只有在將多個(gè)參數(shù)傳遞給echo語句,進(jìn)行輸出時(shí),則使用括號(hào)將生成解析錯(cuò)誤。

  • print語句
    print() 和 echo() 用法一樣,但是echo速度會(huì)比print快一點(diǎn)點(diǎn)。實(shí)際上它也不是一個(gè)函數(shù),因此您無需對(duì)其使用括號(hào)。print語句也可以實(shí)現(xiàn)輸出,且有返回值。當(dāng)輸出成功會(huì)返回1,失敗就會(huì)返回0;因此它可以在表達(dá)式中使用。
  • <?php print "hello "print ("world!");echo print "hello"; ?>
  • printf()函數(shù)
    printf()函數(shù)也可以實(shí)現(xiàn)輸出,可以輸出普通的字符串,也格式化輸出字符串。例:
  • <?php // printf(格式模板,數(shù)據(jù)……) $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\$.....表示要顯示后面第幾個(gè)參數(shù)位置,此行輸出 My name is alice alice因?yàn)橹伙@示第一個(gè)參數(shù)兩次。 printf("My name is %2\$s %1\$s","alice", "com"); // My name is com alice ?>
    • %% – 返回百分比符號(hào)
    • %b – 二進(jìn)制數(shù)
    • %c – 依照 ASCII 值的字符
    • %d – 帶符號(hào)十進(jìn)制數(shù)
    • %e – 科學(xué)計(jì)數(shù)法(比如 1.5e+3)
    • %u – 無符號(hào)十進(jìn)制數(shù)
    • %f – 浮點(diǎn)數(shù)(local settings aware)
    • %o – 八進(jìn)制數(shù)
    • %s – 字符串
    • %x – 十六進(jìn)制數(shù)(%x小寫字母%X大寫字母)
  • sprintf函數(shù)
    此函數(shù)使用方法和printf一樣,唯一不同的就是該函數(shù)把格式化的字符串寫寫入一個(gè)變量中,而不是輸出來。(他不會(huì)輸入內(nèi)容,而是返回格式化的字符串)
  • <?php // 有時(shí)我們只想要將格式化后的字符串保存起來,而不是打印輸出 // 這時(shí)候就用到了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()支持?jǐn)?shù)組參數(shù) 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 函數(shù)
    print_r()函數(shù)是用來輸出變量的,可以用人類容易讀取的格式來顯示這個(gè)變量的信息。
  • print_r有兩個(gè)參數(shù),第一個(gè)是變量,第二個(gè)可設(shè)為true,如果設(shè)為true,則會(huì)返回字符串,否則返回布爾值TRUE。

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

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

    輸出方式總結(jié):

    • echo 可以輸出數(shù)字型和字符型。輸出布爾型的時(shí)候,true輸出的結(jié)果是1,false輸出的結(jié)果是空
    • printf 可以輸出數(shù)字型、字符型、布爾型。輸出布爾型的時(shí)候,true輸出的結(jié)果為1,false輸出的結(jié)果為0。
    • print_r可以輸出數(shù)字型、字符型、布爾型和數(shù)組。輸出布爾型的時(shí)候,true輸出的結(jié)果為1,false輸出的結(jié)果為空;輸出數(shù)組是以‘鍵’=>‘值’的形式。
    • var_dump() 判斷一個(gè)變量的類型與長度,并輸出變量的數(shù)值,如果變量有值輸?shù)氖亲兞康闹挡⒒胤禂?shù)據(jù)類型。此函數(shù)顯示關(guān)于一個(gè)或多個(gè)表達(dá)式的結(jié)構(gòu)信息,包括表達(dá)式的類型與值。數(shù)組將遞歸展開值,通過縮進(jìn)顯示其結(jié)構(gòu)。
    • die() 有兩個(gè)功能:先輸出內(nèi)容,然后退出程序。一般用于數(shù)據(jù)庫連接的判斷,一旦執(zhí)行die()后面的內(nèi)容將不執(zhí)行。
      mysql_connect(“l(fā)ocahost”,“root”,“root”) or die(“鏈接服務(wù)器失敗!”);

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

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

    1.2數(shù)據(jù)類型

    PHP 中的數(shù)據(jù)類型可以分為三大類,分別是標(biāo)量數(shù)據(jù)類型、復(fù)合數(shù)據(jù)類型和特殊數(shù)據(jù)類型

    類型成員
    基本類型布爾,字符串,數(shù)值(整數(shù)和浮點(diǎn)數(shù))
    復(fù)合類型數(shù)組, 對(duì)象
    特殊類型null, 資源, 回調(diào),閉包

    1.四種基本類型

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

    2.兩種復(fù)合類型

    • 數(shù)組(array)
    • 對(duì)象(object)

    數(shù)組是一組數(shù)據(jù)的集合,是將數(shù)據(jù)按照一定規(guī)則組織起來形成的一個(gè)整體。數(shù)組的本質(zhì)是存儲(chǔ)管理和操作一組變量。按照數(shù)組的維度劃分,可以有一維數(shù)組、二維數(shù)組和多維數(shù)組。我們可以使用 array() 函數(shù)來創(chuàng)建數(shù)組。

    // array數(shù)組 array(鍵(key)=>值(value),鍵(key)=>值(value),……) // 默認(rèn)索引 0 1 2 3(索引數(shù)組) $arr1 = [12,13,18,62,85];// 指定數(shù)組的鍵 也就是索引.類似于js中的對(duì)象字面量(關(guān)聯(lián)數(shù)組) $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'); // 在最后增加一項(xiàng) $arr[] = "f"; // 打印數(shù)組 vprintf('Array ( [0] => %s [1] => %s [2] => %s [3] => %s [4] => %s [5] => %s ) ',$arr); // 輸出效果一樣 用于打印數(shù)組 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// 遍歷索引數(shù)組 for($i=0;$i<count($arr);$i++) {echo $arr[$i],'<br >'; }// foreach是專門用來循環(huán)數(shù)組的 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 — 返回?cái)?shù)組中所有的鍵名 print_r(array_keys(arr2)); // 返回鍵名組成的數(shù)組

    對(duì)象(Object)可以用于存儲(chǔ)數(shù)據(jù)。在 PHP 中對(duì)象必須聲明。首先必須使用 class 關(guān)鍵字聲明類對(duì)象。類是可以包含屬性和方法的結(jié)構(gòu)。然后在類中定義數(shù)據(jù)類型,在實(shí)例化的類中使用數(shù)據(jù)類型。

    在支持面向?qū)ο蟮恼Z言中,可以把各個(gè)具體事物的共同特征和行為抽象成一個(gè)實(shí)體,稱之為一個(gè)“類”,而對(duì)象是類使用 new 關(guān)鍵字實(shí)例化后的結(jié)果。

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

    3.兩種特殊類型

    • 空值 NULL
    • 資源 (resource)
    // NULL 在 PHP 中是一種特殊的數(shù)據(jù)類型,它只有一個(gè)值,即 NULL,表示空值(變量沒有值),需要注意的是它與空格的意義不同 // 他并不表示空格,空字符串,零,null不區(qū)分大小寫NULL $str = NULL; var_dump($str); $username = 'zhang'; unset($username); // 釋放變量 @var_dump($username); // @錯(cuò)誤抑制符// (resource) 資源類型 保存到外部資源的一個(gè)引用 // fopen() header("content-type:text/html;charset=utf-8");//設(shè)置編碼,解決中文亂碼 $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數(shù)據(jù)類型轉(zhuǎn)換

    PHP數(shù)據(jù)類型轉(zhuǎn)換分為自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換)和強(qiáng)制轉(zhuǎn)換(顯示轉(zhuǎn)換),強(qiáng)制轉(zhuǎn)換又分為臨時(shí)轉(zhuǎn)換和永久轉(zhuǎn)換。

    轉(zhuǎn)換方式函數(shù)
    臨時(shí)轉(zhuǎn)換(int),(string),(array),(object)…
    強(qiáng)制轉(zhuǎn)換settype(數(shù)據(jù),類型)
    自動(dòng)轉(zhuǎn)換根據(jù)操作符對(duì)操作數(shù)的類型要求進(jìn)行
  • 臨時(shí)轉(zhuǎn)換:用戶
    臨時(shí)轉(zhuǎn)換用小括號(hào)的形式,我們可以通過(int)都是這樣的形式轉(zhuǎn)換成整型,或者轉(zhuǎn)換成浮點(diǎn)型(boolean)縮寫(bool),還可以轉(zhuǎn)換成數(shù)組,(array)的形式轉(zhuǎn)換成數(shù)組,還可以轉(zhuǎn)換成對(duì)象。
  • <?php $var=123; var_dump((string)$var); // 用string關(guān)鍵字 實(shí)現(xiàn) var_dump($var); // int(123) $res=strval($var);//通過strval函數(shù)實(shí)現(xiàn) var_dump($res); // string(3) "123" // 臨時(shí)轉(zhuǎn)換并不會(huì)改變?cè)瓟?shù)據(jù)的類型// http://zhang.com/php/0426/demo.php?id=3&p=5 var_dump($_GET['id']); // 這里看到id是個(gè)字符串,url中的內(nèi)容全部默認(rèn)是字符串 // 我們將其臨時(shí)轉(zhuǎn)換為整數(shù),方便運(yùn)算 $id = (int)$_GET['id']; if($id === 3){echo "查找成功!"; }$myAge = 18;var_dump($myAge,(string)$myAge,(float)$myAge);var_dump((array)$myAge,((array)$myAge)[0]); ?>
  • 永久轉(zhuǎn)換:只針對(duì)變量
  • <?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) } // 字符串轉(zhuǎn)換數(shù)組意義不大,字符串本身就可以當(dāng)數(shù)組使用 $str = "admin"; echo $str[0],$str[1]; // ad // 轉(zhuǎn)對(duì)象,默認(rèn)屬性名scalar var_dump(((object)$str)->scalar); ?>

    臨時(shí)轉(zhuǎn)換和永久轉(zhuǎn)換總結(jié)

    <?php //臨時(shí)轉(zhuǎn)換 $var = true; var_dump($var); $res = (int)$var; var_dump($res); var_dump((int)$var, (integer)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成浮點(diǎn)型 var_dump((float)$var, (double)$var, (real)$var); echo "<br>";$var = 3.6; //舍掉小數(shù)部分 var_dump((int)$var, (integer)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成字符串型 $var = true; var_dump((string)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成布爾類型 $var = "3xuxiaoke"; var_dump((bool)$var, (boolean)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成空 $var = "空"; var_dump((unset)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成數(shù)組 $var = 123; var_dump((array)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成對(duì)象 $var = 12.3; var_dump((object)$var); echo "<br>";//通過系統(tǒng)函數(shù)完成臨時(shí)轉(zhuǎn)換(類型+val()) $var = "3xuxiaoke"; $res = intval($var); var_dump($res); echo "<br>";var_dump(floatval($var), doubleval($var)); echo "<br>";echo "<hr/>";//永久轉(zhuǎn)換------------------------------------ $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” (或?yàn)椤癰ool”) “integer” (或?yàn)椤癷nt”) “float” (或?yàn)椤癲ouble”) "string" "array" "object" “null” */$var = "3xuxiaoke"; echo settype($var, "int")."</br>"; echo floatval($var)."</br>"; echo gettype($var)."</br>";// settype(數(shù)據(jù),類型) 設(shè)置類型 gettype(數(shù)據(jù)) 獲取類型
  • 自動(dòng)轉(zhuǎn)換:系統(tǒng)
    程序會(huì)根據(jù)上下文環(huán)境自動(dòng)進(jìn)行轉(zhuǎn)換
    其它類型轉(zhuǎn)換成布爾型
    • 0>-false
    • 0.0>-false
    • 空字符串“或者”或者“0”或者“0”>-false
    • null>-false
    • 空數(shù)組array()>-false
    <?php // "+"要求參與計(jì)算的數(shù)據(jù)都是數(shù)值類型,如果不是,就會(huì)觸發(fā)自動(dòng)轉(zhuǎn)換 echo 123+"456"; // 579 echo 123+(int)"456"; // ====> 579// "."字符串拼接,希望兩邊都是字符串 echo "php". 123 ."cn"; // php123cn echo "php" . (string)123 . "cn";// 最常用的自動(dòng)轉(zhuǎn)換,一般用于布爾轉(zhuǎn)換,有則為真,無則為假 if(!$email) echo "郵箱未定義"; // 未定義為NULL 會(huì)自動(dòng)轉(zhuǎn)換為false$a = '100abc'; // “100abc”==>100 非數(shù)字開頭 "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數(shù)據(jù)類型檢測(cè)

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

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

    <?php $num = 123; if(is_array($num)){ echo '這是一個(gè)數(shù)組'; }else if(is_string($num)){ echo '這是一個(gè)字符串'; }else if(is_int($num)){ echo '這是一個(gè)整數(shù)'; }else if(is_double($num)){ echo '這是一個(gè)浮點(diǎn)數(shù)'; } /*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 "非法數(shù)值";}}*/// php7+:參數(shù)類型檢測(cè),支持復(fù)合類型,也支持標(biāo)量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); // 非法數(shù)值/* is_numeric() 檢測(cè)是否為數(shù)值字符串is_int() 檢測(cè)是否為整型is_float() 檢測(cè)是否為浮點(diǎn)型is_string() 檢測(cè)是否為字符串is_bool() 檢測(cè)是否為布爾is_array() 檢測(cè)是否為數(shù)組is_object() 檢測(cè)是否為對(duì)象is_null() 檢測(cè)是否為Nullis_resource() 檢測(cè)是否為資源is_scalar() 檢測(cè)是否為標(biāo)量類型 (字符串、數(shù)值、布爾)*/var_export(is_scalar(12)); // truevar_export(is_scalar([1,2,3])); // falsevar_export(is_scalar(null)); // false ?>

    1.5變量聲明創(chuàng)建

    因?yàn)?PHP 是一種弱類型的語言,所以使用變量前不用提前聲明,變量在第一次賦值時(shí)會(huì)被自動(dòng)創(chuàng)建,這個(gè)原因使得 PHP 的語法和C語言、Java 等強(qiáng)類型語言有很大的不同。

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

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

    1.6變量命名規(guī)則

    變量名并不是可以隨意定義的,一個(gè)有效的變量名應(yīng)該滿足以下幾點(diǎn)要求:

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

    注意:PHP 中的變量名是區(qū)分大小寫的,函數(shù)名不區(qū)分大小寫,因此 $var 和 $Var 表示的是兩個(gè)不同的變量。

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

    當(dāng)使用多個(gè)單詞構(gòu)成變量名時(shí),可以使用下面的命名規(guī)范:

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

    1.8變量賦值

    就是用不同的名字訪問同一個(gè)變量?jī)?nèi)容。當(dāng)改變其中任何一個(gè)變量的值,另一個(gè)也會(huì)發(fā)生變化。引用賦值使用“&”來表示引用。

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

    1.8相關(guān)函數(shù)

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

    1.9作用域

    變量的作用范圍(可以被使用的范圍)稱為變量作用域,變量必須在其有效范圍內(nèi)使用,如果超出有效范圍,變量就會(huì)失去其意義。按作用域可以將 PHP 變量分為全局變量和局部變量?jī)煞N。

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

    局部變量與局部作用域

    局部變量就是在函數(shù)的內(nèi)部定義的變量,它只能在定義它的函數(shù)內(nèi)使用。局部變量會(huì)在函數(shù)調(diào)用結(jié)束時(shí)自動(dòng)銷毀。

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

    全局變量與全局作用域

    全局變量就是定義在所有函數(shù)以外的變量,其作用域是當(dāng)前源碼的任何地方,但是在函數(shù)內(nèi)部是不可用的。在程序運(yùn)行期間全局變量會(huì)一直存在,只有程序結(jié)束運(yùn)行時(shí)才會(huì)被銷毀。

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

    預(yù)定義變量和靜態(tài)變量

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

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

    常用的預(yù)定義變量如下所示:

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

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

    <?php$name = 'php中文網(wǎng)';$title = 'PHP 預(yù)定義變量';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中文網(wǎng)"["title"]=>string(19) "PHP 預(yù)定義變量"}["name"]=>string(12) "php中文網(wǎng)"["title"]=>string(19) "PHP 預(yù)定義變量" } // 注意:$GLOBALS 中并不包含函數(shù)中的局部變量和靜態(tài)變量。 */ ?>
    靜態(tài)變量 (static)

    靜態(tài)變量是一個(gè)特殊的局部變量,通過前面的學(xué)習(xí)我們知道,在函數(shù)內(nèi)部定義一個(gè)局部變量,函數(shù)調(diào)用結(jié)束之后這個(gè)變量就會(huì)被銷毀,不能繼續(xù)使用了。而靜態(tài)變量不同,靜態(tài)變量在初始化之后,會(huì)在程序運(yùn)行期間會(huì)一直存在。

    和局部變量相比,靜態(tài)變量具有一下特點(diǎn):

    • 當(dāng)函數(shù)執(zhí)行完畢后,靜態(tài)變量不會(huì)消失;
    • 靜態(tài)變量只能在函數(shù)內(nèi)部使用;
    • 靜態(tài)變量只會(huì)被初始化一次;
    • 靜態(tài)變量初始化的值可以省略,默認(rèn)值為 null;
    • 靜態(tài)變量的初始值只能是具體的字符串、數(shù)值等,而不能是一個(gè)表達(dá)式。

    定義靜態(tài)變量需要用到 static 關(guān)鍵字了,使用方法如下:

    static 變量 = 值;

    定義一個(gè)靜態(tài)變量來記錄函數(shù)調(diào)用的次數(shù),另外再定義一個(gè)局部變量與靜態(tài)變量做對(duì)比,具體代碼如下:

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

    二、PHP 常量詳解

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

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

    與變量相比,常量具有以下幾個(gè)特點(diǎn):

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

    2.1常量的聲明與使用

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

    2.2預(yù)定義常量和魔術(shù)常量

    預(yù)定義常量

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

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

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

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

    魔術(shù)常量

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

    PHP 中魔術(shù)常量有八個(gè),如下所示:

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

    注意:與預(yù)定義常量不同,魔術(shù)常量是不區(qū)分大小寫的。

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。