2.PHP數(shù)據(jù)類型

PHP 數(shù)據(jù)類型簡介

PHP 支持 8 種原始數(shù)據(jù)類型里初。

四種標(biāo)量類型:

  • boolean(布爾型)
  • integer(整型)
  • float(浮點型惨好,也稱作 double)
  • string(字符串)

兩種復(fù)合類型:

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

最后是兩種特殊類型:

  • resource(資源)
  • NULL(無類型)

類型檢測

var_dump() 函數(shù)可以查看表達(dá)式的值和類型
gettype() 函數(shù)用于檢測變量類型
is_ 加類型煌茴,如 is_int(),is_array() 等日川,判斷變量是否為該類型

創(chuàng)建 test.php蔓腐,并編輯內(nèi)容

<?php
$a = TRUE;
$b = 'foo';
$c = 0.1;
$d = 12;

if(is_string($b)) {
    echo nl2br("$b 是字符串".PHP_EOL);
}
if(is_int($c)) {
    echo nl2br("$c 是整型".PHP_EOL);
}
var_dump($a);
echo '<br/>';
var_dump($b);
echo '<br/>';
echo gettype($c).PHP_EOL;
echo '<br/>';
echo gettype($d);

結(jié)果輸出

foo 是字符串
bool(true) 
string(3) "foo" 
double integer

Boolean 布爾類型

布爾類型表達(dá)了真值,可以為 TRUE 或 FALSE龄句,不區(qū)分大小寫回论。

<?php

$a = True;
$b = False;

var_dump($a);// bool(true)
var_dump($b);// bool(false)

運算返回 boolean 類型的結(jié)果:

// == 是一個操作符,它檢測兩個變量值是否相等分歇,并返回一個布爾值

注意當(dāng)下列情況轉(zhuǎn)換為 Boolean 時傀蓉,其值為 FALSE

  • 布爾值 FALSE 本身
  • 整型值 0(零)
  • 浮點型值 0.0(零)
  • 空字符串,以及字符串 "0"
  • 不包括任何元素的數(shù)組(但是空數(shù)組和空字符串或整型零不等)
  • 特殊類型 NULL(包括尚未賦值的變量)
  • 從空標(biāo)記生成的 SimpleXML 對象

Integer 整型

整型值可以使用十進(jìn)制职抡,十六進(jìn)制葬燎,八進(jìn)制或二進(jìn)制表示,前面可以加上可選的符號(- 或者 +)缚甩。

注意:要使用八進(jìn)制表達(dá)谱净,數(shù)字前必須加上 0。要使用十六進(jìn)制表達(dá)擅威,數(shù)字前必須加上 0x壕探。要使用二進(jìn)制表達(dá),數(shù)字前必須加上 0b裕寨。

<?php

$a = 1234; // 十進(jìn)制數(shù)
$b = -123; // 負(fù)數(shù)
$c = 0123; // 八進(jìn)制數(shù) (等于十進(jìn)制 83)
$d = 0x1A; // 十六進(jìn)制數(shù) (等于十進(jìn)制 26)
整數(shù)溢出

如果給定的一個數(shù)超出了 integer 的范圍浩蓉,將會被解釋為 float派继。同樣如果執(zhí)行的運算結(jié)果超出了 integer 范圍宾袜,也會返回 float。

<?php

$a = 123445566;
$b = 9223372036854775807;
$c = 9223372036854775808;
$d = 50000000000000 * 1000000;

var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);

Float 浮點型

浮點型(也叫浮點數(shù) float驾窟,雙精度數(shù) double 或?qū)崝?shù) real)

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;

浮點數(shù)的字長和平臺相關(guān)庆猫,通常最大值是 1.8e308 并具有 14 位十進(jìn)制數(shù)字的精度(64 位 IEEE 格式)

String 字符串類型

一個字符串 string 就是由一系列的字符組成,其中每個字符等同于一個字節(jié)绅络,PHP 中有 4 中表達(dá)方式

  • 單引號
    單引號內(nèi)特殊字符和變量不會被解析
<?php
$a = 'Hello';
echo '$a \n World';//$a \n World
  • 雙引號
    雙引號內(nèi)的特殊字符和變量會被解析月培。
<?php
$a = 'Hello';
/**
 * Hello
 *   World
 */
echo "$a \n World";
  • Heredoc
    Heredoc 類似與雙引號,內(nèi)部轉(zhuǎn)義字符和變量可以被解析恩急,句法結(jié)構(gòu)為
<<<EOT

字符串

EOT;

其中 EOT 為標(biāo)識符杉畜,可以自定義,但是首尾標(biāo)識符必須相同衷恭。開始標(biāo)識符 EOT 后需換行此叠,結(jié)束標(biāo)識符 EOT 必須獨占一行,且前面不許有空格随珠。

<?php
$a ='Hello' ;
echo <<<EOT
$a Hello
EOT;
  • Nowdoc
    Nowdoc 類似于單引號灭袁,無法解析轉(zhuǎn)義字符和變量猬错。句法結(jié)構(gòu)類似 Heredoc,但是需要在開始標(biāo)識符加上單引號茸歧。
<?php
$a ='Hello' ;
echo <<<'EOT'//和 Heredoc 不同點
$a Hello
EOD;

Array 數(shù)組

數(shù)組實際上是一個有序映射倦炒。映射是一種把 values 關(guān)聯(lián)到 keys 的類型。由于數(shù)組元素的值也可以是另一個數(shù)組软瞎,樹形結(jié)構(gòu)和多維數(shù)組也是允許的逢唤。

語法

定義數(shù)組可以用 array()[] 來新建一個數(shù)組。它接受任意數(shù)量用逗號分隔的鍵(key) => 值(value)對涤浇。key 可以是 integer(索引數(shù)組)或者 string(關(guān)聯(lián)數(shù)組)智玻,value 可以是任意類型,如對象芙代、數(shù)組吊奢。

<?php

$a = [
    "b" => "bb",
    "c" => "cc",
];

$b = [
    "bb",
    "cc"
];
$c = [
    "bb",
    "cc",
    "a" => $a,
    "b" => $b,
];

var_dump($a);
var_dump($a[0]);
var_dump($b);
var_dump($b['b']);
var_dump($c['a']['b']);

從結(jié)果中可以看到

  • 如果沒有鍵名,則數(shù)組默認(rèn)使用從 0 開始的數(shù)字鍵名
  • 打印數(shù)組不存在的 key 的值時纹烹,直接返回 NULL
  • 數(shù)組可以多維嵌套页滚,通過鍵名可以獲取特定值

Object 對象

使用 new 可以創(chuàng)建一個新的對象

<?php

class foo
{
    function do()
    {
        echo "Action do"; 
    }
}

$f = new foo;
$f->do();
轉(zhuǎn)換為對象

如果將一個對象轉(zhuǎn)換成對象,它將不會有任何變化铺呵。如果其它任何類型的值被轉(zhuǎn)換成對象裹驰,將會創(chuàng)建一個內(nèi)置類 stdClass 的實例。如果該值為 NULL片挂,則新的實例為空幻林。 array 轉(zhuǎn)換成 object 將使鍵名成為屬性名并具有相對應(yīng)的值,除了數(shù)字鍵音念,不迭代就無法被訪問沪饺。

<?php

class A
{
}

$a = new A();
$b = (object)$a;
$c = (object)'A';
$d = (object)NULL;
$e = (object)['hello'=>'world'];

var_dump($a);
var_dump($b);
var_dump($c->scalar);
var_dump($d);
var_dump($e->hello);

從結(jié)果中可以看出

  • $a 是對象,轉(zhuǎn)換為對象后不發(fā)生變化闷愤,所以 $a 等于 $b
  • 字符串 "A" 轉(zhuǎn)換為對象時整葡,自動生成 scalar 屬性
  • 數(shù)組 ['hello'=>'world'] 轉(zhuǎn)換為對象時,鍵名 hello 作為屬性讥脐,鍵值 world 為屬性值

Resource 資源

資源 resource 是一種特殊變量遭居,保存了外部資源的一個引用,如打開文件旬渠、數(shù)據(jù)庫連接等俱萍,資源是通過專門的函數(shù)來建立和使用的

<?php

$file = fopen($filename);//打開文件
$db = mysqli_connect();//數(shù)據(jù)庫連接
轉(zhuǎn)換為資源

由于資源類型變量保存有為打開文件、數(shù)據(jù)庫連接告丢、圖形畫布區(qū)域等的特殊句柄枪蘑,因此將其它類型的值轉(zhuǎn)換為資源沒有意義。

釋放資源

引用計數(shù)系統(tǒng)是 Zend 引擎的一部分,可以自動檢測到一個資源不再被引用了(和 Java 一樣)腥寇。這種情況下此資源使用的所有外部資源都會被垃圾回收系統(tǒng)釋放成翩。因此,很少需要手工釋放內(nèi)存赦役。

NULL

特殊的 NULL 值表示一個變量沒有值麻敌。NULL 類型唯一可能的值就是 NULL。 在下列情況下一個變量被認(rèn)為是 NULL:

  • 被賦值為 NULL
  • 尚未被賦值
  • 被 unset()
語法

NULL 類型只有一個值掂摔,就是不區(qū)分大小寫的常量 NULL术羔。

<?php

$a = NULL;
轉(zhuǎn)換到 NULL

使用 (unset) 將一個變量轉(zhuǎn)換為 null 將不會刪除該變量或 unset 其值。僅是返回 NULL 值而已

類型轉(zhuǎn)換

PHP 是弱語言類型乙漓,定義變量的時候不需要制定變量類型级历,根據(jù)上下文自動解析成對于的變量類型。

<?php

$foo = "0";
var_dump($foo);

$foo += 2;
var_dump($foo);

$foo = $foo + 1.3;
var_dump($foo);

$foo = 5 + "10 Little Piggies";
var_dump($foo);

$foo = 5 + "10 Small Pigs";
var_dump($foo);

從結(jié)果中可以看出叭披,PHP隱式轉(zhuǎn)換的優(yōu)先級為:浮點型 > 整型 > 字符串

類型強(qiáng)制轉(zhuǎn)換

在要轉(zhuǎn)換的變量之前加上用括號括起來的目標(biāo)類型寥殖,如

<?php

$foo = 10;   // $foo 是整數(shù)
$bar = (boolean) $foo;   // 轉(zhuǎn)換成布爾類型

允許的強(qiáng)制轉(zhuǎn)換有:

-  (int), (integer) - 轉(zhuǎn)換為整形 integer
-  (bool), (boolean) - 轉(zhuǎn)換為布爾類型 boolean
-  (float), (double), (real) - 轉(zhuǎn)換為浮點型 float
-  (string) - 轉(zhuǎn)換為字符串 string
-  (array) - 轉(zhuǎn)換為數(shù)組 array
-  (object) - 轉(zhuǎn)換為對象 object
-  (unset) - 轉(zhuǎn)換為 NULL (PHP 5)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涩蜘,隨后出現(xiàn)的幾起案子嚼贡,更是在濱河造成了極大的恐慌,老刑警劉巖同诫,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粤策,死亡現(xiàn)場離奇詭異,居然都是意外死亡误窖,警方通過查閱死者的電腦和手機(jī)叮盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霹俺,“玉大人柔吼,你說我怎么就攤上這事】苑” “怎么了嚷堡?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艇棕。 經(jīng)常有香客問我,道長串塑,這世上最難降的妖魔是什么沼琉? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮桩匪,結(jié)果婚禮上打瘪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好闺骚,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布彩扔。 她就那樣靜靜地躺著,像睡著了一般僻爽。 火紅的嫁衣襯著肌膚如雪虫碉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天胸梆,我揣著相機(jī)與錄音敦捧,去河邊找鬼。 笑死碰镜,一個胖子當(dāng)著我的面吹牛兢卵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绪颖,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秽荤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柠横?” 一聲冷哼從身側(cè)響起王滤,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滓鸠,沒想到半個月后雁乡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡糜俗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年踱稍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悠抹。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡珠月,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楔敌,到底是詐尸還是另有隱情啤挎,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布卵凑,位于F島的核電站庆聘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勺卢。R本人自食惡果不足惜伙判,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黑忱。 院中可真熱鬧宴抚,春花似錦勒魔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至常潮,卻和暖如春弟胀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕊玷。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工邮利, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垃帅。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓延届,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贸诚。 傳聞我的和親對象是個殘疾皇子方庭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容