<? 和 ?>,但不鼓勵(lì)使用。只有通過(guò)激活 php.ini 中的 short_open_tag 配置指令或者在編譯 PHP 時(shí)使用了配置選項(xiàng) –enable-short-tags 時(shí)才能使用短標(biāo)記。如果文件內(nèi)容是純 PHP 代碼,最好在文件末尾刪除 PHP 結(jié)束標(biāo)記。這可以避免在 PHP 結(jié)束標(biāo)記之后萬(wàn)一意外加入了空格或者換行符,會(huì)導(dǎo)致 PHP 開(kāi)始輸出這些空白,而腳本中此時(shí)并無(wú)輸出的意圖。可以在 PHP 中使用四對(duì)不同的開(kāi)始和結(jié)束標(biāo)記。其中兩種,<?php ?> 和 <script language="php"> </script> 總是可用的。另兩種是短標(biāo)記和 asp 風(fēng)格標(biāo)記,可以在 php.ini 配置文件中打開(kāi)或關(guān)閉。盡管有些人覺(jué)得短標(biāo)記和 ASP 風(fēng)格標(biāo)記很方便,但移植性較差,通常不推薦使用。 Note: 此外注意如果將 PHP 嵌入到 xml 或 XHTML 中則需要使用 <?php ?>標(biāo)記以保持符合標(biāo)準(zhǔn)。如果想查看某個(gè)表達(dá)式的值和類型,用 var_dump() 函數(shù)。 如果只是想得到一個(gè)易讀懂的類型的表達(dá)方式用于調(diào)試,用 gettype()函數(shù)。要查看某個(gè)類型,不要用gettype(),而用 is_type 函數(shù)。以下是一些范例:<?php$a_bool = TRUE; // a boolean$a_str = "foo"; // a string$a_str2 = 'foo'; // a string$an_int = 12; // an integerecho gettype($a_bool); // PRints out: booleanecho gettype($a_str); // prints out: string// If this is an integer, increment it by fourif (is_int($an_int)) { $an_int += 4;}// If $bool is a string, print it out// (does not print out anything)if (is_string($a_bool)) { echo "String: $a_bool";}?>如果要將一個(gè)變量強(qiáng)制轉(zhuǎn)換為某類型,可以對(duì)其使用強(qiáng)制轉(zhuǎn)換或者settype()函數(shù)。通常運(yùn)算符所返回的 boolean 值結(jié)果會(huì)被傳遞給控制流程。要明確地將一個(gè)值轉(zhuǎn)換成 boolean,用 (bool) 或者 (boolean) 來(lái)強(qiáng)制轉(zhuǎn)換。但是很多情況下不需要用強(qiáng)制轉(zhuǎn)換,因?yàn)楫?dāng)運(yùn)算符,函數(shù)或者流程控制結(jié)構(gòu)需要一個(gè) boolean 參數(shù)時(shí),該值會(huì)被自動(dòng)轉(zhuǎn)換-1 和其它非零值(不論正負(fù))一樣,被認(rèn)為是 TRUE!var_dump((bool) ""); // bool(false)var_dump((bool) 1); // bool(true)var_dump((bool) -1); // bool(true)var_dump((bool) "foo"); // bool(true)var_dump((bool) 2.3e5); // bool(true)var_dump((bool) array(12)); // bool(true)var_dump((bool) array()); // bool(false)var_dump((bool) "false"); // bool(true)結(jié)果
bool(false)bool(true)bool(true)bool(true)bool(true)bool(true)bool(false)bool(true)一個(gè) integer 是集合 ? = {…, -2, -1, 0, 1, 2, …} 中的一個(gè)數(shù)。GMP for PHP 和 GMP函數(shù)$a = 1234; // 十進(jìn)制數(shù)$a = -123; // 負(fù)數(shù)$a = 0123; // 八進(jìn)制數(shù) (等于十進(jìn)制 83)$a = 0x1A; // 十六進(jìn)制數(shù) (等于十進(jìn)制 26)如果給定的一個(gè)數(shù)超出了 integer 的范圍,將會(huì)被解釋為 float。同樣如果執(zhí)行的運(yùn)算結(jié)果超出了 integer 范圍,也會(huì)返回 float。 下面是32位的溢出$large_number = 2147483647;var_dump($large_number); // int(2147483647)$large_number = 2147483648;var_dump($large_number); // float(2147483648)$million = 1000000;$large_number = 50000 * $million;var_dump($large_number); // float(50000000000)int(2147483647)double(2147483648)double(50000000000)64位的溢出
$large_number = 9223372036854775807;var_dump($large_number); // int(9223372036854775807)$large_number = 9223372036854775808;var_dump($large_number); // float(9.2233720368548E+18)$million = 1000000;$large_number = 50000000000000 * $million;var_dump($large_number); // float(5.0E+19)double(9.2233720368548E+18)double(9.2233720368548E+18)double(5.0E+19)PHP 中沒(méi)有整除的運(yùn)算符。1/2 產(chǎn)生出 float 0.5。值可以舍棄小數(shù)部分強(qiáng)制轉(zhuǎn)換為 integer,或者使用 round() 函數(shù)可以更好地進(jìn)行四舍五入。var_dump(25/7); // float(3.5714285714286)var_dump((int) (25/7)); // int(3)var_dump(round(25/7)); // double(4)永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等。如果確實(shí)需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或者gmp 函數(shù) 。某些數(shù)學(xué)運(yùn)算會(huì)產(chǎn)生一個(gè)由常量 NAN 所代表的結(jié)果。此結(jié)果代表著一個(gè)在浮點(diǎn)數(shù)運(yùn)算中未定義或不可表述的值。任何拿此值與其它任何值進(jìn)行的松散或嚴(yán)格比較的結(jié)果都是 FALSE。由于 NAN 代表著任何不同值,不應(yīng)拿 NAN 去和其它值進(jìn)行比較,包括其自身,應(yīng)該用 is_nan() 來(lái)檢查。Heredoc 結(jié)構(gòu) 第三種表達(dá)字符串的方法是用 heredoc 句法結(jié)構(gòu):<<<。在該運(yùn)算符之后要提供一個(gè)標(biāo)識(shí)符,然后換行。接下來(lái)是字符串 string 本身,最后要用前面定義的標(biāo)識(shí)符作為結(jié)束標(biāo)志。 結(jié)束時(shí)所引用的標(biāo)識(shí)符必須在該行的第一列,而且,標(biāo)識(shí)符的命名也要像其它標(biāo)簽一樣遵守 PHP 的規(guī)則:只能包含字母、數(shù)字和下劃線,并且必須以字母和下劃線作為開(kāi)頭。<?php/** * Created by Zoe. * User: Administrator * Date: 2017/2/8 * Time: 9:16 */$str = <<<EODExample of stringspanning multiple linesusing heredoc syntax.EOD;/* 含有變量的更復(fù)雜示例 */class foo{ var $foo; var $bar; function foo() { $this->foo = 'Foods'; $this->bar = array('apple', 'strawberry', 'watermelon'); }}$foo = new foo();$name = 'Zoe';echo <<<EOTMy name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should print a capital 'A': /x41EOT;My name is "Zoe". I am printing some Foods.Now, I am printing some strawberry.This should print a capital 'A': AProcess finished with exit code 0數(shù)組 <?php$array = array( "foo" => "bar", "bar" => "foo",);// 自 PHP 5.4 起$array = [ "foo" => "bar", "bar" => "foo",];?>如果在數(shù)組定義中多個(gè)單元都使用了同一個(gè)鍵名,則只使用了最后一個(gè),之前的都被覆蓋了。PHP 數(shù)組可以同時(shí)含有 integer 和 string 類型的鍵名,因?yàn)?PHP 實(shí)際并不區(qū)分索引數(shù)組和關(guān)聯(lián)數(shù)組。數(shù)組單元可以通過(guò) array[key] 語(yǔ)法來(lái)訪問(wèn)。方括號(hào)和花括號(hào)可以互換使用來(lái)訪問(wèn)數(shù)組單元(例如"$foo[bar]" 是合法的(“合法”的原文為 valid。在實(shí)際測(cè)試中,這么做確實(shí)可以訪問(wèn)數(shù)組的該元素,但是會(huì)報(bào)一個(gè)常量未定義的 notice。無(wú)論如何,強(qiáng)烈建議不要使用 $foo[bar]這樣的寫(xiě)法,而要使用 $foo[‘bar’] 來(lái)訪問(wèn)數(shù)組中元素。–haohappy 注)。至于為什么參見(jiàn)以上的例子和字符串中的變量解析中的解釋.可以用 array_diff() 和數(shù)組運(yùn)算符來(lái)比較數(shù)組。新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注