ホームページ  >  記事  >  バックエンド開発  >  PHP変数型の詳細な紹介

PHP変数型の詳細な紹介

小云云
小云云オリジナル
2018-03-22 13:51:262656ブラウズ

この記事は主に PHP 変数の型について詳しく説明します。これが皆さんのお役に立てれば幸いです。

PHP は 9 つのプリミティブ データ型をサポートしています。

4 つのスカラー型:

  • booleanBooleanboolean布尔型

  • integer 整形

  • float 浮点型(也称作double

  • string 字符串

3种复合类型:

  • array 数组

  • object 对象

  • callable 可调用

2种特殊类型

  • resource 资源

  • null

整数整形

float 浮動小数点型 (double)🎜🎜🎜🎜string String 🎜🎜🎜🎜🎜3 つの複合タイプ: 🎜🎜🎜🎜🎜array array🎜🎜🎜🎜オブジェクト オブジェクト🎜🎜🎜🎜callable を呼び出すことができます 🎜🎜🎜🎜🎜 2 つの特殊なタイプ 🎜🎜🎜🎜 🎜リソース code> リソース🎜 🎜🎜🎜<code style="font-family:'Source Code Pro'、Consolas、Menlo、Monaco、'Courier New'、monospace;font-size:.93em;padding:2px 4px;">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 参数时,该值会被自动转换。

ブール値に変換すると、次の値は FALSE とみなされます:

  • Boolean FALSE自体FALSE本身

  • 整型值 0

  • 浮点型 0.0

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

  • 不包括任何元素的数组

  • 特殊类型NULL(包括尚未赋值的变量)

  • 从空标记生成的SimpleXML对象

所有其它值都被认为是TRUE(包括任何资源和NAN)。

Integer 整型

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

语法

整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。

要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b

🎜整数値 0🎜🎜🎜浮動小数点 0.0🎜🎜🎜空の文字列、および文字列 "0"🎜🎜🎜要素を含まない配列🎜🎜🎜特殊な型NULL (値が割り当てられていない変数を含む)🎜🎜🎜空のタグから生成された単純な XML オブジェクト🎜 🎜他のすべての値は、TRUE (すべてのリソースと NAN)。 🎜

Integer integer

🎜integer はセット ℤ = {..., -2, -1, 0, 1 、2、...}。 🎜

構文

🎜整数値は、10 進数、16 進数、8 進数、または 2 進数で表すことができ、先頭にオプションの記号 (- または +) を付けることができます。 🎜🎜 8 進数の表現を使用するには、数値の前に 0 (ゼロ)。 16 進数の表現を使用するには、数値の前に 0x。バイナリ表現を使用するには、数値の前に 0bコード>。 🎜<h4 style="font-family:'-apple-system', 'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;font-weight:500;line-height:1.2;color:rgb(51,51,51);margin-top:1.5em;margin-bottom:1.5em;font-size:1.25em;background-color:rgb(255,255,255);">Example</h4><pre class="brush:php;toolbar:false;" style="font-family:&#39;Source Code Pro&#39;, Consolas, Menlo, Monaco, &#39;Courier New&#39;, monospace;font-size:.93em;padding:1em;margin-bottom:1.5em;line-height:1.45;color:rgb(51,51,51);border:none;">&lt;?php $a = 1234; // 十进制数 $a = -123; // 负数 $a = 0123; // 八进制数 (等于十进制 83) $a = 0x1A; // 十六进制数 (等于十进制 26) $a = 0b11111111; // 二进制数字 (等于十进制 255)?&gt;</pre><p style="margin-top:1.5em;margin-bottom:1.5em;color:rgb(51,51,51);font-family:'-apple-system', 'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;font-size:14px;background-color:rgb(255,255,255);">整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 <code style="font-family:'Source Code Pro', Consolas, Menlo, Monaco, 'Courier New', monospace;font-size:.93em;padding:2px 4px;">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 double 形式を使用するため、丸めによる最大相対誤差は 1.11e-16 です。基本的ではない数学的演算ではより大きな誤差が生じる可能性があるため、複合演算を実行する場合は誤差の伝播を考慮する必要があります。

また、10進数で正確に表現できる0.1や0.7などの有理数は、仮数部がいくらあっても、内部で使用するバイナリでは正確に表現できないため、多少の劣化をせずにバイナリ形式に変換することはできません。ちょっとした精度。これは、混乱を招く結果につながる可能性があります。たとえば、floor((0.1+0.7)*10) は、通常、結果の内部表現が実際には 7.9999999999999991118... のようなものであるため、期待される 8 ではなく 7 を返します。

したがって、浮動小数点数の結果が最後の桁まで正確であるとは決して信じないでください。また、2 つの浮動小数点数が等しいかどうかを比較しないでください。本当に高い精度が必要な場合は、任意精度の数学関数または gmp 関数を使用する必要があります。

浮動小数点数の比較

上記の警告メッセージにあるように、内部式の理由により、2 つの浮動小数点数が等しいかどうかを比較する際に問題があります。ただし、浮動小数点値を比較する回りくどい方法があります。

浮動小数点数が等しいかどうかをテストするには、その値よりほんの少しだけ大きい最小誤差値を使用します。この値は、マシン イプシロンまたは最小単位整数とも呼ばれ、計算で受け入れられる最小の差の値です。

$a と $b は小数点以下 5 桁の精度に相当します。

<?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 構文構造

一重引用符

文字列を定義する最も簡単な方法は、一重引用符 (文字) で囲むことです。 ' )。

一重引用符自体を表現するには、その前にバックスラッシュ () を追加してエスケープする必要があります。バックスラッシュを単独で表現するには、バックスラッシュ () を 2 つ使用します。他の形式のバックスラッシュは、バックスラッシュ自体として扱われます。つまり、r や n などの他のエスケープ シーケンスを使用する場合、これは特別な意味を持たず、2 文字自体のみを意味します。

二重引用符やヒアドキュメント構文とは異なり、変数特殊文字エスケープシーケンスは一重引用符で囲まれた文字列に置き換えられません。

二重引用符

文字列が二重引用符 (") で囲まれている場合、PHP はいくつかの特殊文字を解析します。

シーケンス 意味
n 改行(LFまたはASCII文字セットの0x0A(10))
r キャリッジリターン(CRまたは0x0) ASCII 文字セット) D (13) )
t 水平タブ (HT または ASCII 文字セットの 0x09 (9))
v 垂直タブ (VT または ASCII 文字セットの 0x0B (11)) (PHP 以降5.2.5)
e エスケープ (ASCII 文字セットの ESC または 0x1B (27)) (PHP 5.4.0 以降)
f エスケープ (ASCII 文字セットの FF または 0x0C) (12 )) (PHP 5.2.5 以降)
バックスラッシュ
$ ドルマーク
" 二重引用符
[0-7] 1,3} 正規表現の並びと一致するものは8進数で表現された文字です
x[0-9A-Fa-f]{1,2} 正規表現の並びと一致するものは8進数で表現された文字です16進数形式

一重引用符で囲まれた文字列と同様、他の文字をエスケープするとバックスラッシュが表示されます。
二重引用符で定義された文字列の最も重要な特徴は、変数が解析されることです。

ヒアドキュメント構造

文字列を表現する 3 番目の方法は、ヒアドキュメント構文構造、つまり a2c6bf4e02d6538682c0c8293fa6d978 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。

一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。本文由北大青鸟学校开发小组提供。

相关推荐:

php变量类型

以上がPHP変数型の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。