<?php
// 算术运算符
// + - * / %
// 连接运算符 .
// 将点号前后的字符串连接起来,如果不是字符串,会自动转换为字符串。
// 。号两边有数字的话,要加空格将数字和.隔开;
echo 'ab'.'cd'; //abcd
echo 123 .'cd'; //123cd
echo 123 . 456; ///123456
echo 123 . true; // ‘1231’,true转为字符串,为‘1’
echo '123'.false; // ‘123’,false转为字符串,为“”,空字符串
//自赋值运算符
//针对数字的:+= -= *= /= %=
// 针对字符串的: 。=
$a = 1;
$a += 1;
echo $a; //2
$b = 'abc';
$b .= 'hhh';
echo $b; //abchhh
// 自增或自减运算符
echo '<br>';
$a1 = 1;
$a2 = 1;
echo $a1++, $a1; // 12,先取值1,再将原来a1加1变为2;再输出
echo ++$a2, $a2;// 22,先将原来a1加1变为2,再取值2;再输出
//比较运算
// 等于== :两个数据基本相等,类型可能发生转换,就算是相等,这是一种模糊相等
// 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
echo 1==true; //1
echo 1=='1'; //1
echo false==0; //1
echo 1.0==1; //1
//全等于=== :数据类型和值都一样,才是全等。
echo 1===1; //1
// 不全等与!==
echo 1!=='1'; //1
var_dump (''==0); //bool(true). ""==0==false==null
var_dump ('abc'<'b'); //bool(true)
var_dump (false<2); //bool(true) ,有bool值,则其他数据也会转为bool值后进行比较
var_dump (null<'abc'); //bool(true),将null转为"",进行数字或者词汇比较
var_dump ('1'<'a'); //bool(ture)
var_dump ([]>1); //bool(ture)
var_dump ([]>'1'); //bool(true)
var_dump ([]<true); //bool(true)
var_dump ([1]==true); //bool(true)
var_dump ([]==false); //bool(true)
var_dump ([]==null); //bool(true)
// 三元运算符
// 表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
// 简化形式表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
echo 1?2:3?4:5; // 4
echo 1?:2; // 1 ,这是简化写法
// 逻辑运算符
// && || ! and or
var_dump (false && func()); //bool(false)
var_dump (true || func()); //bool(true)
//上面的func()不会被调用,被短路了
$a = 16;//判断给定的数是否能被3和5整除
if ($a%3==0 && $a%5==0) {
echo "yes";
}else{
echo "no";
}
//逻辑非
if (!isset($a)) { //如果$a为真空null,就执行代码
# code...
}
if (empty($a)) { //如果$a为空empty,如“”,0,0.0,‘0’,false,[]就执行代码,注意与上面的区别
# code...
}
/
// 位运算符
// 位运算符允许对二进制数指定的位进行求值和操作,整数之间的按位与先要转换为二进制数。
// $a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
// $a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。
// $a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
// ~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。
// 要用括号确保想要的优先级。例如 $a & $b == true 先进行比较再进行按位与;而 ($a & $b) == true 则先进行按位与再进行比较。
//错误抑制符@
// 在一个表达式出现错误的时候,可以将错误隐藏起来不输出,但错误依然存在。应用于某些不能控制的错误出现时。不让错误信息出现在用户使用的过程中。
if (@mysqli_connect('localhost','root','123')) {
echo "连接成功";
}else{
echo "连接失败";
}
//未加@前:
//加了@之后:
//运算符的优先级
/*
1、括号优先;
2、先乘除取余后加减;
3、赋值通常在最后;
4、大致为:算术>比较>逻辑;
*/
?>
练习:给定一个整数表示年份,判断该年份是否是闰年。
经过多次修改,终于达到了我的预期结果。
要求:
第一次访问时显示:
访问后直接点判断显示: