PHP中的类型
概述
PHP 支持 8 种原始数据类型
四种标量类型:
boolean(布尔型)integer(整型)float(浮点型,也称作 double)string(字符串)
两种复合类型:
array(数组)object(对象)
最后是两种特殊类型:
resource(资源)NULL(无类型)
实际上 double 和 float 是相同的,由于一些历史的原因,这两个名称同时存在。
变量的类型通常不是由程序员设定的,确切地说,是由 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() // 某对象的方法是否存在
TRUE 和 FALSE 不区分大小写
自动类型转换为布尔值
当自动类型转换为 boolean 时,以下值被认为是 FALSE
布尔值 FALSE 本身整型值 0(零)浮点型值 0.0(零)空字符串,以及字符串 "0"不包括任何元素的数组不包括任何成员变量的对象(仅 PHP 4.0 适用)特殊类型 NULL(包括尚未赋值的变量)从空标记生成的 SimpleXML 对象
要使用八进制表达,数字前必须加上 0(零)
要使用十六进制表达,数字前必须加上 0x
要使用二进制表达,数字前必须加上 0b
二进制表达的 integer 自 PHP 5.4.0 起可用
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18
PHP 不支持无符号整数
Integer 值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示
整数溢出
如果给定的一个数超出了 integer 的范围(即出现整数溢出),将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float
自动类型转换为整型
从布尔值转换
FALSE 将产生出 0(零),TRUE 将产生出 1(壹)
从浮点型转换
当从浮点数转换成整数时,将向下取整。
从字符串转换
如果该字符串没有包含 ‘.’,’e’ 或 ‘E’ 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。
<?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) ?>
浮点数的字长和平台相关
以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等
如果确实需要更高的精度,应该使用任意精度数学函数或者GMP函数。
NAN
某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值
不应拿 NAN 去和其它值进行比较,包括其自身,应该用is_nan()来检查
String 字符串一个字符串可以用 4 种方式表达
单引号双引号heredoc 语法结构nowdoc 语法结构(自 PHP 5.3.0 起)
string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改
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()
版权声明:本文为博主原创文章,未经博主允许不得转载。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? PHPStorm으로 개발할 때 때때로 CLI (Command Line Interface) 모드에서 PHP를 디버그해야합니다 ...

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.
