目次
Boolean への自動型変換
整数オーバーフロー
整数への自動型変換
NAN
Heredoc、Nowdoc
エスケープ
花括号语法
自动类型转换为字符串
字符串函数
字符串的编码

PHP の型

Jun 23, 2016 pm 01:27 PM

概要

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

4 つのスカラー型:

boolean(布尔型)integer(整型)float(浮点型,也称作 double)string(字符串)
ログイン後にコピー

2 つの複合型:

array(数组)object(对象)
ログイン後にコピー

最後に 2 つの特別な型:

resource(资源)NULL(无类型)
ログイン後にコピー

実際には double と float は同じです。歴史的な理由により、これらは2 つの名前が同時に存在します。

変数の型は通常、プログラマによって設定されるのではなく、変数が使用されるコンテキストに基づいて実行時に PHP によって決定されます。

変数の型を検出する

var_dump() は変数に関する関連情報を出力する

gettype() は変数の型を取得する

<?phpclass foo {}function fn () {}$a = true;$b = 2;$c = 3.2;$d = 'hello';$e = ['a', 'b'];$f = new foo;var_dump($a); // bool(true)var_dump($b); // int(2)var_dump($c); // float(3.2)var_dump($d); // string(7) "hello"var_dump($e); // array(2) { [0]=> string(1) "a" [1]=> string(1) "b" }var_dump($f); // object(foo)#1 (0) { }var_dump(fn); // string(2) "fn"echo '<br>';echo gettype($a); // booleanecho gettype($b); // integerecho gettype($c); // doubleecho gettype($d); // stringecho gettype($e); // arrayecho gettype($f); // objectecho gettype(fn); // string?>
ログイン後にコピー

返される文字列は変更する必要がある可能性があるため、特定の型をテストするために gettype() を使用しないでください将来のバージョン。さらに、文字列比較が含まれるため、実行速度が遅くなります。 代わりに is_* 関数を使用してください

is_bool()is_integer()is_float()is_numeric()is_string()is_scalar() is_array()is_object()is_resource()is_null()function_exists() // 函数是否存在method_exists() // 某对象的方法是否存在
ログイン後にコピー
Boolean ブール型

TRUE と FALSE は大文字と小文字を区別しません

Boolean への自動型変換

自動型変換が boolean の場合、次の値は FALSE とみなされます

布尔值 FALSE 本身整型值 0(零)浮点型值 0.0(零)空字符串,以及字符串 "0"不包括任何元素的数组不包括任何成员变量的对象(仅 PHP 4.0 适用)特殊类型 NULL(包括尚未赋值的变量)从空标记生成的 SimpleXML 对象
ログイン後にコピー
Integer 整数型

To use 8 進表現の場合は、数値の前に 0 (ゼロ) を追加する必要があります
16 進表現を使用するには、数値の前に 0x を追加する必要があります
2 進表現を使用するには、数値の前に 0b を追加する必要があります

PHP 5.4 以降では、2 進表現の場合は整数.0 現在利用可能です

整数の語長はプラットフォームに依存しますが、通常の最大値は約 20 億 (32 ビット符号付き) です。 64 ビット プラットフォームでの最大値は通常約 9E18 です

PHP は符号なし整数をサポートしていません

整数 値の語長は定数 PHP_INT_SIZE で表すことができます。PHP 4.4.0 および PHP 5.0.5 以降、最大値は 9E18 です。値は定数 PHP_INT_MAX で表すことができます。

整数オーバーフロー

を表します

指定された数値が整数の範囲を超える (つまり、整数オーバーフローが発生する) 場合、浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合も float を返します

整数への自動型変換

ブール値からの変換
FALSE は 0 (ゼロ)、TRUE は 1 (1) を生成します

浮動小数点からの変換
浮動小数点から整数への変換の際、切り捨てとなります。

文字列から変換

文字列に「.」、「e」、または「E」が含まれておらず、その数値が整数型(PHP_INT_MAX で定義されている)の範囲内にある場合、文字列は次のように使用されます値を取得するための整数。それ以外の場合はすべて、値は浮動小数点数として扱われます。

<?php$foo = 1 + "10.5";                // $foo is float (11.5)$foo = 1 + "-1.3e3";              // $foo is float (-1299)$foo = 1 + "bob-1.3e3";           // $foo is integer (1)$foo = 1 + "bob3";                // $foo is integer (1)$foo = 1 + "10 Small Pigs";       // $foo is integer (11)$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)$foo = "10.0 pigs " + 1;          // $foo is float (11)$foo = "10.0 pigs " + 1.0;        // $foo is float (11)     ?>
ログイン後にコピー
Float 浮動小数点型

浮動小数点数の語長はプラットフォーム依存

0.1や0.7など10進法で正確に表現できる有理数は、仮数部がいくらあっても正確に表現できない内部で使用されるバイナリ システムによって表現されるため、1 つを失わずに表現することはできません。 ポイントツーポイント精度でバイナリ形式に変換します。これは、混乱を招く結果につながる可能性があります。たとえば、floor((0.1+0.7)*10) は、通常、結果の内部表現が実際には 7.9999999999999991118 のようなものであるため、期待される 8 ではなく 7 を返します…
したがって、浮動小数点の結果を決して信頼しないでください。最後の桁まで正確であり、2 つの浮動小数点数が等しいかどうかを比較することはありません

本当に高い精度が必要な場合は、任意精度の数学関数または GMP 関数を使用する必要があります。

NAN

特定の数学演算は、定数 NAN で表される結果を生成します。この結果は、浮動小数点演算で未定義または表現できない値を表します

NAN は、それ自体を含む他の値と比較すべきではなく、is_nan() を使用してチェックする必要があります

文字列 String

文字列は 4 つの方法で表現できます

单引号双引号heredoc 语法结构nowdoc 语法结构(自 PHP 5.3.0 起)
ログイン後にコピー

文字文字列内の文字列は、0 から始まり、対応する数値を含める配列構造と同様の角かっこを使用する添字によってアクセスおよび変更できます

Heredoc、Nowdoc

Heredoc の構造は、二重引用符のない二重引用符で囲まれた文字列のようなものです

最後に引用された識別子は行の最初の列にある必要があり、識別子の命名は他のタグと同じ PHP ルールに従う必要があります。文字、数字、アンダースコアのみを含めることができ、文字と文字で始まる必要があります。アンダースコア。

$str = <<<EODExample of stringspanning multiple linesusing heredoc syntax.EOD;
ログイン後にコピー

Nowdoc 構造は一重引用符のない一重引用符付き文字列のようなものです

$str = <<<'EOD'Example of stringspanning multiple linesusing nowdoc syntax.EOD;
ログイン後にコピー

エスケープ

文字列が一重引用符 (') で囲まれている場合、一重引用符 (') とバックスラッシュのみをエスケープできます ()

文字列の場合二重引用符 (") で囲まれている場合、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} 符合该正则表达式序列的是一个以十六进制方式来表达的字符


和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来

花括号语法

由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别,不能有空格,且必须用双引号包围(不能用在双引号之外)

$x = 'hello';$y = 'world';$str = "Hi, {$x}";// $str = 'Hi, {$x}'; // 无效// $str = "Hi, {$x}" . {$y}; // 无效
ログイン後にコピー

自动类型转换为字符串

一个布尔值 boolean 的 TRUE 被转换成 string 的 “1”。Boolean 的 FALSE 被转换成 “”(空字符串)

一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)

数组 array 总是转换成字符串 “Array”,因此,echo 和 print 无法显示出该数组的内容

Object不能转换成字符串,自 PHP 5 起,适当时可以用 __toString 方法

字符串函数

http://php.net/manual/zh/ref.strings.php

字符串的编码

字符串会被按照该脚本文件相同的编码方式来编码。操作文本的函数必须假定字符串是如何编码的,不幸的是,PHP 关于此的函数有很多变种

某些函数假定字符串是以单字节编码的,但并不需要将字节解释为特定的字符。例如 substr(),strpos(),strlen() 和 strcmp()。理解这些函数的另一种方法是它们作用于内存缓冲区,即按照字节和字节下标操作。
某些函数被传递入了字符串的编码方式,也可能会假定默认无此信息。例如 htmlentities() 和 mbstring 扩展中的大部分函数。

其它函数使用了当前区域(见 setlocale()),但是逐字节操作。例如 strcasecmp(),strtoupper() 和 ucfirst()。这意味着这些函数只能用于单字节编码,而且编码要与区域匹配。例如 strtoupper(“á”) 在区域设定正确并且 á 是单字节编码时会返回 “Á”。如果是用 UTF-8 编码则不会返回正确结果,其结果根据当前区域有可能返回损坏的值。

最后一些函数会假定字符串是使用某特定编码的,通常是 UTF-8。intl 扩展和 PCRE(上例中仅在使用了 u 修饰符时)扩展中的大部分函数都是这样。尽管这是由于其特殊用途,utf8_decode() 会假定 UTF-8 编码而 utf8_encode() 会假定 ISO-8859-1 编码。

要书写能够正确使用 Unicode 的程序依赖于很小心地避免那些可能会损坏数据的函数,必要时使用mbstring扩展的多字节字符串函数。

Resource 资源类型

资源 resource 是一种特殊变量,保存了到外部资源的一个引用,如打开文件、数据库连接、图形画布区域等的特殊句柄

由于 PHP 4 Zend 引擎引进了引用计数系统,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。

持久数据库连接比较特殊,它们不会被垃圾回收系统销毁。

将其它类型的值转换为资源没有意义。

NULL

特殊的 NULL 值表示一个变量没有值。NULL 类型只有一个值,就是不区分大小写的常量 NULL。

在下列情况下一个变量被认为是 NULL:

被赋值为 NULL。尚未被赋值。被 unset()。
ログイン後にコピー
强制类型转换

允许的强制转换有

(int), (integer) - 转换为整形 integer(bool), (boolean) - 转换为布尔类型 boolean(float), (double), (real) - 转换为浮点型 float(string) - 转换为字符串 string(array) - 转换为数组 array(object) - 转换为对象 object(unset) - 转换为 NULL (PHP 5)
ログイン後にコピー

使用settype()函数

// 可以设置的type类型如下“boolean” (或为“bool”,从 PHP 4.2.0 起)“integer” (或为“int”,从 PHP 4.2.0 起)“float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)"string""array""object"“null” (从 PHP 4.2.0 起)
ログイン後にコピー

还有一些类型转换的函数boolval()、intval()、floatval()、strval()

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles