検索

概要

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 =  <p>Nowdoc 構造は一重引用符のない一重引用符付き文字列のようなものです </p> <pre class="brush:php;toolbar:false">$str =  <h2 id="エスケープ">エスケープ</h2> <p>文字列が一重引用符 (') で囲まれている場合、一重引用符 (') とバックスラッシュのみをエスケープできます ()</p> <p>文字列の場合二重引用符 (") で囲まれている場合、PHP は次の特殊文字を解析します</p>   
序列 含义
\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 までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 中国語版

SublimeText3 中国語版

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。