搜尋
首頁後端開發php教程PHP變數類型詳細介紹

PHP變數類型詳細介紹

Mar 22, 2018 pm 01:51 PM
php介紹詳細

本文主要和大家分享PHP變數類型詳細介紹,屬於基礎分享,希望能幫助大家。

PHP支援9種原始資料類型。

4種標量類型:

  • #boolean布林型

  • integer 整形

  • float 浮點型(也稱為double

  • #string 字串

3種複合型別:

  • array 數組

  • object 物件

  • callable 可呼叫

2種特殊型別

  • #resource 資源

  • ##resource
 資源

###null### 無型別###############為了確保程式碼的易讀性,我們通常會使用一些偽類型:#######
  • mixed 混合类型

  • number 数字类型

  • callback 回调类型(又称为callable

  • array|object 数组|对象类型

  • void 无类型

变量的类型不是程序员设定,是由PHP根据该变量使用的上下文在运行时决定的。

与变量类型有关的常用函数

  • 如果想查看某个表达式的值和类型,使用var_dump()函数。

  • 获取变量的类型,使用gettype()函数。

  • 要检验某个类型,可以使用is_type函数,如:

    <?php
        $a = 1;        
        if(is_int($a)){            echo "\r\n\$a是在整形\r\n";
        }        
        if(is_float($a)){            echo "\r\n\$a是在浮点型\r\n";
        }        
        if(is_string($a)){            echo "\r\n\$a是在字符串\r\n";
        }

        ......    ?>
  • 如果需要将一个变量强制转换为某类型,可以对其使用强制转换或者settype()函数。

接下来我们先来看看四种标量类型

Boolean 布尔类型

这是最简单的类型。boolean表达了真值,可以为TRUE 或 FALSE

语法

要指定一个布尔值,使用常量TRUE 或 FALSE。(不区分大小写)如:

<?php
    $bool = TRUE; // 设置$bool 为 TRUE?>

通常运算符所返回的boolean值结果会被传递给控制流程。

转换为布尔值

要明确的将一个值转换成boolean,用(bool)或者(boolean)来强制转换,但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

當轉換為boolean 時,以下值被認為是FALSE:

  • #布林值FALSE本身

  • 整數值0

  • 浮點型0.0

  • 空字串,以及字串"0"

  • 不包含任何元素的陣列

  • 特殊型別NULL(包含尚未賦值的變數)

  • 從空標記產生的SimpleXML物件

所有其它值都被認為是TRUE(包括任何資源和NAN)。

Integer 整數

integer 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某個數。

語法

整數值可以使用十進制,十六進制,八進位或二進位表示,前面可以加上可選的符號(- 或 +)。

要使用八進位表達,數字前必須加上 0(零)。要使用十六進位表達,數字前必須加上 0x。要使用二元表達,數字前必須加上 0b

Example

<?php
    $a = 1234; // 十进制数
    $a = -123; // 负数
    $a = 0123; // 八进制数 (等于十进制 83)
    $a = 0x1A; // 十六进制数 (等于十进制 26)
    $a = 0b11111111; // 二进制数字 (等于十进制 255)?>

整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX 来表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 PHP_INT_MIN 表示。

整数溢出

如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float

PHP 中没有整除的运算符。1/2 产生出 float 0.5。 值可以舍弃小数部分,强制转换为 integer,或者使用 round() 函数可以更好地进行四舍五入。

转换为整型

要明确地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。

思考下以下两种流程控制的区别:

<?php
    $num = &#39;1&#39;;    if(1 == $num){        # code ...
    }    
    if($num == 1){        # code ...
    }?>

从资源类型转换

将 resource 转换成 integer 时, 结果会是 PHP 运行时为 resource 分配的唯一资源号。

从浮点型转换

当从浮点数转换成整数时,将向下取整。

如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下,除了 Windows,通常为 +/- 9.22e+18 = 2^63),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

PHP 7.0.0 起,NaN 和 Infinity 在转换成 integer 时,不再是 undefined 或者依赖于平台,而是都会变成零。

Warning

绝不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。

<?php
    echo (int) ( (0.1+0.7) * 10 ); // 显示 7!?>

Float 浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:

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

浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)

浮點數的精確度

浮點數的精確度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。

此外,以十進制能夠精確表示的有理數如0.1 或0.7,無論有多少尾數都不能被內部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉換為二進制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會回傳 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...。

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函數或 gmp 函數。

比較浮點數

如上述警告訊息所言,由於內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂迴的方法來比較浮點數值的。

要測試浮點數是否相等,要使用一個只比該數值大一丁點的最小誤差值。該值也稱為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差異值。

$a 和 $b 在小數點後五位精確度內都是相等的。

<?php
    $a = 1.23456789;
    $b = 1.23456780;
    $epsilon = 0.00001;    
    if(abs($a-$b) < $epsilon) {        echo "true";
    }?>

NaN

某些数学运算会产生一个由常量 NAN (not a number) 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值(除了 TRUE)进行的松散或严格比较的结果都是 FALSE

由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。

String 字符串

一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。

分析一下:

1 Byte = 8 bit
由于1个字节存储一个字符,那么1字节所能存储字符的可能性为:2^8=256

语法

一个字符串可以用 4 种方式表达:

  1. 單引號

  2. 雙引號

  3. #heredoc 語法結構

  4. nowdoc 語法結構

單引號

定義一個字串的最簡單的方法是用單引號把它包圍起來(字元')。

要表達一個單引號自身,需在它的前面加個反斜線()來轉義。要表達一個反斜線自身,則用兩個反斜線(\)。其它任何方式的反斜線都會被當成反斜線本身:也就是說如果想使用其它轉義序列例如 r 或 n,並不代表任何特殊含義,就單純是這兩個字符本身。

不像雙引號和 heredoc 語法結構,在單引號字串中的變數特殊字元的轉義序列將不會被取代。

雙引號

果實字串是包圍在雙引號(")中, PHP 將對一些特殊的字元進行解析:

序列 意義
#n 換行(ASCII 字元集中的LF 或0x0A (10))
r #回車(ASCII 字元集中的CR 或0x0D (13))
#t 水平製表符(ASCII 字元集中的HT 或0x09 (9))
v 垂直製表符( ASCII 字元集中的VT 或0x0B (11))(自PHP 5.2.5 起)
e Escape(ASCII 字元集中的ESC 或0x1B (27)) (自PHP 5.4.0 起)
f 換頁(ASCII 字元集中的FF 或0x0C (12))(自PHP 5.2.5 起)
\ 反斜線
#$ 美元標記
" 雙引號
[0-7]{1,3} 符合該正規表示式序列的是一個以八進位方式來表示的字元
x[0-9A-Fa-f]{1,2} 符合該正規表示式序列的是一個以十六進位方式來表達的字元

和單引號字串一樣,轉義任何其它字元都會導致反斜線被顯示出來。
用雙引號定義的字串最重要的特徵是變數會被解析。

Heredoc 結構

第三種表達字串的方法是用 heredoc 句法結構:。在該運算符之後要提供一個標識符,然後換行。接下來是字串 <code style="font-family:'Source Code Pro', Consolas, Menlo, Monaco, 'Courier New', monospace;font-size:.93em;padding:2px 4px;">string 本身,最後要用前面定義的識別碼作為結束標誌。

結束時所引用的標識符必須在該行的第一列,而且,標識符的命名也要像其它標籤一樣遵守PHP 的規則:只能包含字母、數字和下劃線,並且必須以字母和底線作為開頭。

Warning

要注意的是結束標識符這行除了可能有一個分號(;)外,絕對不能包含其它字元。這意味著標識符不能縮進,分號的前後也不能有任何空白或製表符。更重要的是結束識別碼的前面必須是個被本地作業系統認可的換行,例如在UNIX 和Mac OS X 系統中是n,而結束定界符(可能其後有個分號)之後也必須緊跟一個換行。

如果不遵守該規則導致結束標識不“乾淨”,PHP 將認為它不是結束標識符而繼續尋找。如果在檔案結束前也沒有找到一個正確的結束標識符,PHP 將會在最後一行產生一個解析錯誤。

Heredocs 結構不能用來初始化類別的屬性。自 PHP 5.3 起,此限制僅對 heredoc 包含變數時有效。

Heredoc 結構就像是沒有使用雙引號的雙引號字串,這就是說在 heredoc 結構中單引號不用被轉義,但是上文中列出的轉義序列還可以使用。變數將被替換,但在 heredoc 結構中含有複雜的變數時要格外小心。

在 PHP 5.3.0 以后,也可以用 Heredoc 结构来初始化静态变量和类的属性和常量。

自 PHP 5.3.0 起还可以在 Heredoc 结构中用双引号来声明标识符:

<?php
    echo <<<"FOOBAR"
    Hello World!
    FOOBAR;
?>

Nowdoc 结构

就像 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。

一个 nowdoc 结构也用和 heredocs 结构一样的标记 , 但是跟在后面的标识符要用单引号括起来,即 <code style="font-family:'Source Code Pro', Consolas, Menlo, Monaco, 'Courier New', monospace;font-size:.93em;padding:2px 4px;">。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。<span style="margin:0px;padding:0px;">本文由</span><span style="margin:0px;padding:0px;color:rgb(51,51,51);">北大青鸟学校</span><span style="text-align:justify;margin:0px;padding:0px;">开发小组提供。</span>

相关推荐:

php变量类型

以上是PHP變數類型詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
繼續使用PHP:耐力的原因繼續使用PHP:耐力的原因Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python:探索他們的相似性和差異PHP和Python:探索他們的相似性和差異Apr 19, 2025 am 12:21 AM

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。