浮点数小数类型以及超过整型所能存储范围的整型(不保证精度),精度范围大概在15个有效数字左右
浮点型定义两种方式:
$f = 1.23;
$ff = 1.23e10; // 科学计数法
浮点数保存的数据不够精确,所以尽量不用来做比较判断
整型超过自身存储的大小之后会用浮点型存储
布尔类型:两个值true(真) 和 false(假) ,通常用于判断比较
NULL 不等于false
-------------------------------------------------------------
运算符: operator 是一种将数据进行运算的特殊符号,
赋值运算符
符号是 "=" 表示将右边的结果(可以是变量,数据,常量和其他均速出来的结果)保存到内存的某个位置,然后将位置的内存地址赋值给左侧的变量
算术运算符: 不能用0相除
-$a,取反
$a + $b,加法,$a 和 $b 的和
$a - $b,减法,$a 和 $b 的差
$a * $b,乘法,$a 和 $b 的积
$a / $b,除法,$a 和 $b 的商
$a % $b,取余,$a 除以 $b 的余数
$a ** $b,乘方,$a 的 $b 次方
比较运算符:比较两个数据的大小,或两个内容是否相同,返回的结果都是布尔类型:满足返回true,不满足返回false
> 左边大于右边
>= 左边大于等于右边
< 左边小于右边
<= 左边小于等于右边
== 相等
!= 不相等
=== 全等于,左边与右边相同:大小以及数据的类型都要相同
!== 不全等于,只有大小或者类型不同
<?php
var_dump(null == "");
var_dump(null == false);
var_dump(true > false);
var_dump(0 == "a");
var_dump("1" == "01");
var_dump("10" == "1e1");
var_dump(100 == "1e2");
var_dump([4,5] < [1,2,3]);
var_dump((object)"Test" > "Test");
var_dump((object)"Test" > [2,3]);
switch ("a") {
case 0:
echo "0";
break;
case "a":
echo "a";
break;
}
从结果可以看出
- null 或 String 和 string 比较时,将 null 转换为 "",进行数字或词汇比较
- bool 或 null 和其他类型比较时,转换为 bool,FALSE < TRUE
- string,resource 或 number 相互比较时,将字符串或资源转换为数字,按普通数字比较
- array 之间比较时,具有较少成员的数组较小
- object 和其他类型比较时,object 总是更大
- array 和其他类型比较时,array 总是更大,但是比对象小
- switch 中第一个条件满足时,不会执行后面满足条件的语句
-----------------------------------------------------------
连接运算符
. 就一个点,将两个字符串连接起来
.= 符合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边的变量
$a.=$b == $a = $a.$b
$b = "Hello ";
$b .= "There!"; //相当于 $b = $b. "There" ;
错误抑制符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
<?php
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");
$value = @$cache[$key];
错误控制运算符只对表达式有效。对新手来说一个简单的规则就是:
如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include 调用,常量,等等之前。
不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
注意:目前的 @ 错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了 @ 来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。
----------
三目运算符 (简单的分支结构的缩写)
语法格式:
表达式1 ? 表达式2 : 表达式3
运算:如表达式1成立,那么执行表达式2,否则执行表达式3
自操作运算符
++ 在原来的值上+1
-- 在原来的值上-1
++$a 与 $a++ 结果一样但是过程不一样,++$a 是 先+1后赋值,$a++ 是先赋值后加1
衍生符号
+= 左边的结果与右边的结果相加然后赋值给左边的变量
-=
*=
/=
%=
如果进行除法或者取余运算,那么要考虑右边表达式的结果是否为0
-------------------------------------------------------
计算级码:计算机在实际存储数据的时候,采用的编码规则(二进制)
计算机码:源码,反码,和补码,数值本身最左边一位是用来充当符号位:整数位0,负数为1
源码:数据本身从十进制转换成二进制得到的结果
正数:左边符号位为0(正数的源码,反码和补码就是源码本身)
负数:左边符号位为1
反码:针对负数,符号位不变,其他位取反
补码:针对负数,反码+1
系统中存在两个0:+0 和 -0
+0:00000000
-0:00000000 源码
取反:11111111
补码:00000000
位运算
取出计算机中最小的单位(位 bit)进行运算
& 按位与,两个位都为1,结果为1,否则为0
| 按位或,两个有一个为1,结果为1
~ 按位非,一个如果为1则为1
^ 按位异或,两个相同则为0,不同则为1
<< 按位左移,整个位(32位),向左移动一位,右边补0
>> 按位右移,整个位右移动一位,左边补号位对应内容(整数补0,负数补1)
--------------------------------------------------------------
逻辑运算
与 && 左边的条件与右边的条件同时成立(两边结果都为true)
或 || 左边的条件或者右边的条件只要有一个满足即可
非 ! 对已有条件进行取反,本身为true,取反结果就是 false
逻辑与和逻辑或有称之为断了运算:如果第一个表达式结果已经满足条件了,那么就不会运行逻辑运算符后面的表达式,所以尽可能把自己已知的结果放在表达式的前面。
for ($i = 0;$i<100;$i++){
if ($i%2==0 && $i%3==0){
echo $i .'<br/>';
}
}
--------------------------------------------------------------
执行运算符
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。
<?php $output = `ls -al`; echo "<pre>$output</pre>";
注意,反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
--------------------------------------------------------- php 7 信的运算符
组合比较符
太空船操作符使用 <=>
表示,用于比较两个表达式。当 $a 小于、等于或大于 $b 时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。
<?php // 整数 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点数 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>
------------------------------------
NULL合并运算符
NULL 合并运算符使用 ??
表示,意味着如果 ??
之前的变量存在且值不为 NULL,它就会返回自身的值,否则返回 ??
后的操作数。
<?php $username = $_GET['user'] ?? 'nobody'; $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
合并运算符通常可用三元运算符作为替换,多个合并运算符的优先级从左到右一次执行。
......