Boolean

当转换为 boolean 时,以下值被认为是 FALSE:

布尔值 FALSE 本身

整型值 0(零)

浮点型值 0.0(零)

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

不包括任何元素的数组[]

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

从空标记生成的 SimpleXML 对象

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

// Consider that the 0 could by any parameters including itself

var_dump(0 == 1); // false

var_dump(0 == (bool)'all'); // false

var_dump(0 == 'all'); // TRUE, take care

var_dump(0 === 'all'); // false

// To avoid this behavior, you need to cast your parameter as string like that :

var_dump((string)0 == 'all'); // false

?>

整数

$a = 1234; // 十进制数

$a = -123; // 负数

$a = 0123; // 八进制数 (等于十进制 83)

$a = 0x1A; // 十六进制数 (等于十进制 26)

$a = 0b11111111; // 二进制数字 (等于十进制 255)//php5.4开始

?>

注意类型转换:

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

$w = (int)1.7;// 1

//字符串转换

$x = 0123;// 83

$y = "0123" + 0;// 123

$z = '0x12' + 0;//0

$aa = '0b101' + 0;//0

$bb = (int)'0123';//123

$cc = (int)'0x123';//0

$dd = (int)'0b1011';//0

?>

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

Example #2 32 位系统下的整数溢出

$large_number = 2147483647;

var_dump($large_number); // int(2147483647)

$large_number = 2147483648;

var_dump($large_number); // float(2147483648)

$million = 1000000;

$large_number = 50000 * $million;

var_dump($large_number); // float(50000000000)

?>

Example #3 64 位系统下的整数溢出

$large_number = 9223372036854775807;

var_dump($large_number); // int(9223372036854775807)

$large_number = 9223372036854775808;

var_dump($large_number); // float(9.2233720368548E+18)

$million = 1000000;

$large_number = 50000000000000 * $million;

var_dump($large_number); // float(5.0E+19)

?>

浮点型

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

$a = 1.234;

$b = 1.2e3;

$c = 7E-10;

?>

浮点数的精度有限。

floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似

7.9999999999999991118...。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等

$a 和 $b 在小数点后五位精度内都是相等的。

$a = 8 - 6.4; // which is equal to 1.6

$b = 1.6;

var_dump($a == $b); // is not true

//This happens probably because $a is not really 1.6, but 1.599999..

$epsilon = 0.00001;

if(abs($a-$b) < $epsilon) {

echo "true";

}

?>

字符串

单引号

只转义\

// 输出: Arnold once said: "I'll be back"

echo 'Arnold once said: "I\'ll be back"';

// 输出: You deleted C:\*.*?

echo 'You deleted C:\\*.*?';

?>

双引号

正则用双引号

\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} 符合该正则表达式序列的是一个以十六进制方式来表达的字符

双引号示例:

$great = 'fantastic';

//输出: This is {$great}

echo "This is {\$great}";

// 无效,输出: This is { fantastic}

echo "This is { $great}";

// 有效,输出: This is fantastic

echo "This is {$great}";

echo "This is ${great}";

echo "This is the value of the var named $name: {${$name}}";

echo "This is the value of the var named by the return value of getName(): {${getName()}}";

echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";

// 有效,输出: I'd like an A & W

echo "I'd like an {${beers::softdrink}}\n";

// 也有效,输出: I'd like an Alexander Keith's

echo "I'd like an {${beers::$ale}}\n";

?>

Heredoc 结构

没有使用双引号的双引号字符串

Warning

要注意的是结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 n,而结束定界符(可能其后有个分号)之后也必须紧跟一个换行。

如果不遵守该规则导致结束标识不“干净”,PHP 将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP 将会在最后一行产生一个解析错误。

Heredocs 结构不能用来初始化类的属性。自 PHP 5.3 起,此限制仅对 heredoc 包含变量时有效。

$str = <<

Example of string

spanning multiple lines

using heredoc syntax.

EOD;

echo <<

My name is "$name". I am printing some $foo->foo.

Now, I am printing some {$foo->bar[1]}.

This should print a capital 'A': \x41

EOT;

This does not:

foo(<<

abcd

END;

);

// syntax error, unexpected ';'

//Without semicolon, it works fine:

foo(<<

abcd

END

);

?>

Nowdoc 结构

单引号字符串

//不能使用hereDoc

class foo {

public $bar = <<

bar

EOT;

}

?>

存取和修改

用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个 E_NOTICE 级别错误。用负数下标写入字符串时会产生一个 E_NOTICE

级别错误,用负数下标读取字符串时返回空字符串。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是 NULL 字符。

PHP 的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。仅应对单字节编码例如 ISO-8859-1 的字符串进行此类操作。

// 取得字符串的第一个字符

$str = 'This is a test.';

$first = $str[0];

$first = $str{2};

//错误Fatal Error:Cannot create references to/from string offsets nor overloaded objects

$first = &$str[0];

// 取得字符串的最后一个字符

$str = 'This is still a test.';

$last = $str[strlen($str)-1];

// 修改字符串的最后一个字符

$str = 'Look at the sea';

$str[strlen($str)-1] = 'e';

?>

Note:

自 PHP 5.4 起字符串下标必须为整数或可转换为整数的字符串,否则会发出警告。之前例如 "foo" 的下标会无声地转换成 0。

PHP 5.5 增加了直接在字符串原型中用 [] 或 {} 访问字符的支持。

转换

1.一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串

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

3.数组 array 总是转换成字符串 "Array"

4.在 PHP 4 中对象 object 总是被转换成字符串 "Object",PHP 5 起,适当时可以用 __toString 方法。

5.资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值

6.NULL 总是被转变成空字符串。

字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。

$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)

?>

数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。

PHP 数组可以同时含有 integer 和 string 类型的键名,因为 PHP 实际并不区分索引数组和关联数组。

Key

key 会有如下的强制转换:

1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。

2.浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。

3.布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。

4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。

5.数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

Example #2 类型强制与覆盖示例

$array = array(

1 => "a",

"1" => "b",

1.5 => "c",

true => "d",

);

var_dump($array);

?>

以上例程会输出:

array(1) {

[1]=>

string(1) "d"

}

Example #3 混合 integer 和 string 键名

$array = array(

"foo" => "bar",

"bar" => "foo",

100 => -100,

-100 => 100,

);

var_dump($array);

?>

以上例程会输出:

array(4) {

["foo"]=>

string(3) "bar"

["bar"]=>

string(3) "foo"

[100]=>

int(-100)

[-100]=>

int(100)

}

Example #5 仅对部分单元指定键名

$array = array(

"a",

"b",

6 => "c",

"d",

);

var_dump($array);

?>

以上例程会输出:

array(4) {

[0]=>

string(1) "a"

[1]=>

string(1) "b"

[6]=>

string(1) "c"

[7]=>

string(1) "d"

}

转换

integer,float,string,boolean 和 resource 类型转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。

如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

class A {

private $A; // This will become '\0A\0A'

}

class B extends A {

private $A; // This will become '\0B\0A'

public $AA; // This will become 'AA'

}

var_dump((array) new B());

?>

上例会有两个键名为 'AA',不过其中一个实际上是 '0A0A'。

将 NULL 转换为 array 会得到一个空的数组。

Callback / Callable 类型

class foo {

static function callIt(callable $callback) {

$callback();

}

static function doStuff() {

echo "Hello World!";

}

}

foo::callIt('foo::doStuff');

//The code would work fine, if we replaced the '$callback()' with 'call_user_func($callback)' or if we used the array ['foo', 'doStuff'] as the callback instead.

?>

The callable type hint, like is_callable(), will trigger an autoload of the class if the value looks like a static method callback

// An example callback function

function my_callback_function() {

echo 'hello world!';

}

// An example callback method

class MyClass {

static function myCallbackMethod() {

echo 'Hello World!';

}

}

// Type 1: Simple callback

call_user_func('my_callback_function');

// Type 2: Static class method call

call_user_func(array('MyClass', 'myCallbackMethod'));

// Type 3: Object method call

$obj = new MyClass();

call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)

call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)

class A {

public static function who() {

echo "A\n";

}

}

class B extends A {

public static function who() {

echo "B\n";

}

}

call_user_func(array('B', 'parent::who')); // A

// Type 6: Objects implementing __invoke can be used as callables (since PHP 5.3)

class C {

public function __invoke($name) {

echo 'Hello ', $name, "\n";

}

}

$c = new C();

call_user_func($c, 'PHP!');

?>

Example #2 使用 Closure 的示例

// Our closure

$double = function($a) {

return $a * 2;

};

// This is our range of numbers

$numbers = range(1, 5);

// Use the closure as a callback here to

// double the size of each element in our

// range

$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);

?>

以上例程会输出:

2 4 6 8 10

文档中使用的伪类型与变量

mixed

mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。

例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组。

number

number 说明一个参数可以是 integer 或者 float。

callback

本文档中在 PHP 5.4 引入 callable 类型之前使用 了 callback 伪类型。二者含义完全相同。

array|object

array|object 意思是参数既可以是 array 也可以是 object。

void

void 作为返回类型意味着函数的返回值是无用的。void 作为参数列表意味着函数不接受任何参数。

...

在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。

强制转换

(int), (integer) - 转换为整形 integer

(bool), (boolean) - 转换为布尔类型 boolean

(float), (double), (real) - 转换为浮点型 float

(string) - 转换为字符串 string

(array) - 转换为数组 array

(object) - 转换为对象 object

(unset) - 转换为 NULL (PHP 5)

(binary) 转换和 b 前缀转换支持为 PHP 5.2.1 新增。

注意在括号内允许有空格和制表符,所以下面两个例子功能相同:

$foo = (int) $bar;

$foo = ( int ) $bar;

?>

将字符串文字和变量转换为二进制字符串:

$binary = (binary)$string;

$binary = b"binary string";

?>

实例:

$a = TRUE;

echo ($a++) . $a; // prints "11"

?>

用php表示0123,php易错笔记-类型相关推荐

  1. php 双引号 常量,php易错笔记-变量,常量,运算符

    变量 基本 $4site = 'not yet'; // 非法变量名:以数字开头 $_4site = '_4site'; // 合法变量名:以下划线开头 $i站点is = 'mansikka'; // ...

  2. 雷达融合笔记及一些易错点总结(1)----------一线激光雷达

    一线激光雷达程序流程图如下:(本地测试用) .h文件 1: 2: #include"stdafx.h" 3: #include<iostream> 4: #includ ...

  3. 大学C语言期末考试·选择题·易错点难点总结笔记

    这是我刷的错题,然后错题知识点归纳,每一套题一个编号段 第一套题 1.%二元运算符,左结合性,左右都为整数,不能是双精度型 2.数组[0]第一个和[4]第五个, 3.字符0为NULL 4.结构体变量定 ...

  4. C语言易错题集 第四部

    C语言易错题集 第四部 一.位操作相关 二.switch()相关 三.输出相关 四.实数相关 五.指针&a相关 六.指针访问数组元素相关 七.转义字符相关 八.类型提升问题 九.是不是正确的浮 ...

  5. C++灵活易错特性-02

    C++笔记系列:灵活易错的特性 - 02 关键词: 类型和类型转换 typedef 作用域 头文件 类型和类型转换 typedef typedef为已有的类型声明提供一个新名称.可以将typedef看 ...

  6. 计算机概论易错题总结:概念类

    为期末考试,冲鸭-- 文字类 1.在计算机运行时,把程序和数据一样存放在内存中,这是1946年由_____领导的研究小组 正式提出并论证的. 冯·诺依曼. 2.被誉为第一位程序员的是_____. Au ...

  7. Java进阶3 - 易错知识点整理(待更新)

    Java进阶3 - 易错知识点整理(待更新) 该章节是Java进阶2- 易错知识点整理的续篇: 在前一章节中介绍了 ORM框架,中间件相关的面试题,而在该章节中主要记录关于项目部署中间件,监控与性能优 ...

  8. MySQL初阶 - 易错知识点整理(待更新)

    MySQL初阶 - 易错知识点整理(待更新) Note:这里根据 CSDN Mysql技能树 整理的易错题,可参考MySQL 有这一篇就够,MySQL详细学习教程(建议收藏),MySQL 菜鸟教程 文 ...

  9. 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...

    四年级数学易错题练习 一.填空题 1.1.25×0.8表示(              ). 2.去掉0.25的小数点,就是把这个数扩大(      ):把50.4的小数点向左移动两位,就是把它缩小到 ...

最新文章

  1. 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)
  2. 生成word_Word生成员工信息表,每一页生成独立文件,还能自动命名
  3. 20165323 第五周学习总结
  4. 支持多分支语句吗_Go的条件判断语句
  5. python classmethod static_【python】classmethod staticmethod 区别
  6. sklearn knn 算法
  7. python爬虫作业帮_【Python爬虫】01作业
  8. sphinx php 扩展安装
  9. 经济金融学之1宏观经济学
  10. 基于51单片机开发板8*8LED矩阵的贪吃蛇程序
  11. 爬取包图网教师节海报
  12. 十年老撕鸡分享,五分钟搭建个人轻论坛
  13. 基于Spring Boot的讲师积分管理系统(毕业设计,毕设)
  14. policy服务器未能登陆,开机出现Group Policy Client服务未能登录的解决措施
  15. 基本概念学习(7002)---网络流量控制
  16. 2023年江苏专转本志愿填报辅导(22上岸南工程学长辅导手册)
  17. netflix自动续费关闭_如何禁用Netflix的自动播放预览
  18. 最短路(Finding Shortest Path)
  19. 频率计的交流耦合和直流耦合的区别_示波器DC/AC耦合设置及影响
  20. 交换机日志删除_如何查看交换机报警日志 并导出日志 命令是什么

热门文章

  1. python--函数
  2. .Net程序员学用Oracle系列(10):系统函数(中)
  3. mysql 安装以及配置
  4. 解决Ubuntu双击打开 txt 中文乱码(gedit)
  5. Cortex-M3 异常中断向量表
  6. 【原】storm源码之一个class解决nimbus单点问题
  7. Laravel 中的异常处理
  8. python3的urllib2报错问题解决方法
  9. IDEA 启动tomcat 端口占用原因以及解决方法( 使用debug模式)
  10. ORA-01502:索引或这类索引的分区处于不可用状态 的解决方法