变量
变量检测
- bool isset ( mixed $var [, mixed $… ] )— 检测变量是否设置
注意:一次可以检测多个变量,有一个变量未设置,则返回false; 如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
变量类型判断
- string gettype ( mixed $var ) — 获取变量的类型
返回值:
“boolean”
“integer”
“double”(由于历史原因,如果是 float 则返回“double”,而不是“float”)
“string”
“array”
“object”
“resource”
判断是否是指定类型的变量:is_array,is_bool,is_float(is_double),is_int(is_integer),is_null,is_string,is_object,is_resource
变量类型转换
最常见的是字符串与数字的转换,或是数字/字符串->布尔值的转换。
$a='12avaf1422';
$b=1;
echo $a+$b;//13
$num1=3.14;
$num2=(int)$num1;
var_dump($num1);
echo "<br/>";
var_dump($num2);//int(3)
- empty() — 检查一个变量是否为空 当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
“” (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
“0” (作为字符串的0)
NULL(null值)
FALSE(布尔值false)
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)
传值赋值与引用赋值
$num1=1;
$num2=2;
echo $num2;//2
$num2=&$num1;
echo $num2;//1
引用赋值结合变量销毁unset():
$num1=0;
$num2=&$num1;
unset($num1);
var_dump($num2,$num1);//int(0) NULL
注意:$num1销毁变量后,$num2值依然存在
动态变量名
$mk='孟珂';
$$mk='s';
echo $mk,'love',$$mk;
常量
定义
- 该值在脚本中不能改变,不能销毁,不能重新声明
- 常量名不需要加 $ 修饰符
- 常量名称习惯由大写字母组成,便于与变量区分;用define定义:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ),case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
- 用defined()检测常量是否存在
注意: 在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。
2019-09-17补充: 常量的值;在 PHP 5 中,value 必须是标量( integer、 float、string、boolean、NULL)在 PHP 7 中还允许是个 array 的值。
输出
define('PRICE',100);
echo PRICE;//100
动态常量名
用变量的值做常量的名字:
constant()
define('PI',3.14);
$chang='PI';
echo constant($chang);
运算符
算数运算符
整型太大的话,会自动转换成浮点型:
var_dump(100000000000000000000000);//float(1.0E+23)
取模运算时,结果的正负仅仅取决于被除数的正负:
$a=-10;//换成10试试
$b=3;//换成-3试试
echo $a%$b;
比较运算符
三元运算符
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
$test=1;
$re=$test??'不存在';//PHP7+写法
$re=$test?:'不存在';// PHP 5.3+普通写法
echo $re,PHP_EOL;
echo 'hi';
逻辑运算符
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
echo( (10 xor 1) ?:'假');//假
- 关于“短路”
// foo() 根本没机会被调用,被运算符“短路”了
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
- 关于运算符优先级
“||” 比 “or” 的优先级高
“&&” 比 “and” 的优先级高
=比 and or 的优先级高
$e = false || true;
$f = false or true;
var_dump($e, $f);//true false
$g = true && false;
$h = true and false;
var_dump($g, $h);//false true
递增递减运算符
递增或递减对布尔值无效!
字符串运算符
.就一个点,我只说一次!
赋值运算符
控制结构
Switch case
注意:必须要使用 break 来阻止代码跳入下一个 case 中继续执行!
do while
do
{
要执行的代码;
}
while (条件);
for
for (初始值; 条件; 增量)
{
要执行的代码;
}
注意:
上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
break 和continue 区别
break 在循环中作用是结束一个循环
break后面可以跟数字,表示跳出几层循环,默认为1
continue立即结束本次循环,继续执行下一次循环
函数
PHP 的真正威力源自于它的函数!
函数是一段封装好的代码,随时可调用。
定义格式
命名规则和变量命名一样,但是函数不区分大小写;
函数的名称应该提示出它的功能。
函数执行与返回流程
当函数所有语句执行完毕或者碰到return语句时,函数结束,交回执行权。
函数传参方式
函数内部变量与外界变量无关:
function t($a)
{
$a += 1;
return $a;
}
$a = 1;
t($a);
echo $a;//输出1
引用传参(不推荐,因为函数内部的语句影响到了外部的变量,破坏了函数的封装性):
function t(&$a)
{
$a += 2;
return $a;
}
$b = 1;
t($b);
echo $b;//输出3
函数作用域
global 关键字用于函数内访问全局变量。
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; //15;
PHP将所有全局变量存储在一个名为$GLOBALS[index]的数组中。index为 保存变量的名称。上面的实例可以写成这样:
$x=5;
$y=10;
function