PHP运算符、流程控制、函数、数组和字符串

一、运算符

一、算数运算符

算数运算符用于完成各种运算。

1
2
3
4
5
+		加法运算符			$a+$b
- 减法运算符 $a-$b
* 乘法运算符 $a*$b
/ 除法运算符 $a/$b
% 取模运算符(求余数) $a%$b
二、赋值运算符

赋值运算符,将一个数据值赋给一个变量。

复合运算符,在赋值之前会完成某个运算。

1
2
3
4
5
6
$a = 5		赋值
$a += 5 加法赋值 $a = $a + 5
$a -= 5 减法赋值 $a = $a - 5
$a *= 5 乘法赋值 $a = $a * 5
$a /= 5 除法赋值 $a = $a / 5
$a .= 5 拼接赋值 $a = $a.5
三、字符串运算

字符串运算用于拼接字符串。

1
2
3
4
5
6
7
$a = "hello";
$b = $a . "world";//表示拼接前后两个字符串
echo $b;

$b = "Hello";
$b .= "World!";// .= 表示$b = $b."World!"
echo $b;
四、递增(++)和递减(–)运算符

递增和递减运算符将变量的当前值加1或减1,可以使代码更简洁。

1
2
3
4
++$i		先加  $i的值加1,然后再返回$i的值;
$i++ 后加 先返回$i的值,然后再将$i的值加1;
--$i 先减 $i的值减一,然后再返回$i的值;
$i++ 后减 先返回$i的值,然后再将$i的值减1;
五、逻辑运算符

利用逻辑运算符可以根据多个变量的值进行判断,这使得控制程序的流程成为可能,逻辑操作符常用于控制结构中,如if条件和while及for循环。

1
2
3
4
&&	and			逻辑与
|| or 逻辑或
! 逻辑非
xor 异或(有且仅有一个为true,则返回true)
六、比较运算符

比较运算符,返回一个布尔值TRUE或FALSE。

1
2
3
4
5
6
7
8
9
>		大于
< 小于
>= 大于或等于
<= 小于或等于
!= 不等于
<> 不等于
== 等于
=== 全等于(两个比较的内容里,类型也要相同)
!== 全不等
七、三元运算符

语法:expression1 ? expression2 : expression3

1
2
3
4
$a = 5;
$b = 2;
$res = $a > $b ? "yes" : "no";
echo $res;
八、运算符的优先级

运算符的优先级指的是哪一个运算符应该先计算。

具体运算符的优先级,请点击这里

二、流程控制

一、判断语句

1. if 语句

1
2
3
4
5
6
7
if(expression){
//statement;
}else if(expression){
//statement;
}else{
//statement;
}

if语句用括号中的表达式返回值(true或false)来控制是否执行指定的代码程序;表达式为数字0、空、未定义的字符串,内置常量都会返回false。

1
2
3
4
5
6
短路现象
$a = 5;
$num = 1;
if($a == 3 or $num++) {
echo $num;//输出1
}

2. switch 语句

语法格式:

1
2
3
4
5
6
7
8
9
switch (expression){
case value:
//statements;
break;
default:
//statements;
break;
}
在每个case块的末尾处都有break语句,如果没有break语句,就会执行所有后续的case块,直到遇到break语句为止。

switch 语句可以看做是if-else组合的一种变体,如果需要比较有限值的变量,通常会使用switch 语句。

二、循环语句

1. while

语法格式:

1
2
3
while (条件为真){
要执行的代码块;
}

2. do…while

do…while循环是while的一种变体,它在代码块的结束处验证循环条件。

do…while循环首先会执行一次代码块,然后检查条件,如果指定条件为真,则重复循环。

语法格式:

1
2
3
do{
要执行的代码块;
} while (条件为真);

3. for循环

当确定脚本的运行次数,可以使用for循环。

语法格式:

1
2
3
4
5
6
7
for (init counter; test counter; increment counter) {
code to be executed;
}
参数:
init counter:初始化循环计数器的值
test counter:评估每个循环迭代。如果为TRUE,继续循环;如果为FALSE,循环结束。
increment counter:增加循环计数器的值

4. foreach循环

foreach循环只适用于数组,并用于遍历数组中的每个键/值对。每次循环都将指针后移一位。

语法格式:

1
2
3
4
5
6
7
8
第一种:
foreach ($array as $value) {
code to be executed;
}
第二种:
foreach ($array as $key => $value) {
code to be executed;
}
三、跳出循环

1. break

如果包含一个break 语句,将立即结束 while、do.while、for、foreach、switch 的执行。

2. continue

continue 语句使当前循环执行结束,并从下一次循环开始执行。

三、函数

1. 函数概念

函数是用来完成某种特定任务的可重用代码块;

函数可以是程序更具模块化,拥有良好的结构;

函数定义后在程序中可以重复调用;

函数分为内置函数和自定义函数。

2. 函数分类

(1)内置函数

PHP 系统提供了大量功能强大的函数,帮助我们解决各种问题。

(2)创建自定义函数

语法格式:

1
2
3
function functionName() {
被执行的代码块;
}
3. 函数简介及区别

函数用function关键字来声明。

函数名称是由字母或下划线开头而非数字。

函数名不区分大小写,不过在调用函数的时候,通常使用其在定义时相同的形式。

PHP 不支持函数重载,所以自定义函数不能和内置函数重名。

参数出现在括号中,如果有多个参数,用逗号分隔。

不同语言函数的区别:

  1. 在Java等强类型语言中方法的名字严格区分大小写;
  2. C语言中的函数也是严格区分大小写;
  3. PHP 到现在的版本,函数名称不区分大小写;
  4. 很多语言允许函数的重载,即函数有相同的名称但是函数参数不同;
  5. PHP 不支持函数的重载。
4. 参数传递

值传递(传值)

函数内对参数值的改变不会影响函数外部的值。

引用传递(传址)

当需要在函数体内对参数地修改在函数体外也能反映时,用引用传递。

使用引用传递参数要在参数前加上&符号。

变量本身传入,传入后的变量与原变量建立联系,函数体内变量的变化,会影响到原变量本身。

1
2
3
4
5
$a = 25;
function modifyNum (&$num){
$num = 100;
}
modifyNum($a);

默认参数:可以为参数指定默认值,在没有提供其他值的情况下,则将默认值自动赋给该参数。

可选参数:可以指定某个参数为可选参数,这些参数需要放在参数列表的末尾,需要指定其默认值为空;如果指定了多个可选参数,可以选择性地传递某些参数。

5. 返回值

当需要将函数的执行结果返回给调用者时,这时可以使用return语句返回结果。

return语句执行后,将使得函数立即结束运行,并将控制权返回被调用的行。

1
2
3
4
5
6
7
8
function mysquare($num){
if($num == ""){
return;
}
$res = $x * $x;
return $res;
}
echo mysquare(4);
6. 变量作用域和生命周期

由于引入了函数,程序中变量的能见度发生了变化,即变量的作用范围发生了改变。变量分为:全局变量(global),局部变量(locak),静态变量(static)。

函数之外声明的变量拥有Global作用域,只能在函数以外进行访问。

函数内部声明的变量拥有Local作用域,只能在函数内部进行访问。

全局变量在函数内使用方法:

1
2
3
4
5
6
7
8
$user = "xiaoming";
function test(){
//方法一 php在名为$GLOBALS[index]的数组中存储了所有的全局变量。下标存有变量名。
//这个数组在函数内也可以访问,并能够用于直接更新全局变量。
$user = $GLOBALS["user"];
//方法二 在函数内部变量前面使用global关键字
global $user;
}

局部变量:函数体内定义的变量为局部变量,只在函数体内可见。

局部变量作用域:从声明它的那条语句开始到函数结束。

静态变量:当函数完成/执行后,会删除所有变量。不过,有时需要不删除某个局部变量。要完成这一点,在首次声明变量时使用static关键词。然后每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。

静态变量使用方法:

1
2
3
4
5
6
7
8
function statics(){
static $num = 10;
$num++;
echo $num;
}
statics();
statics();
statics();
7. include和require
  1. include() include()语句将在其被调用的位置处包含一个文件,如include("init.php")

  2. include_once() include_once()的作用与include()相同,不过它会首先验证是否已经包含了该文件,如果已经包含,则不再执行include_once();

  3. require() 其与include()一样,只不过require()通常放在php程序的最前面;

  4. require_once() 其与include_once()一样,但是也要放在php程序的最前面;

  5. include与require的区别:require一个文件存在错误的话,那么程序就会中断执行,并显示致命错误;include一个文件存在错误的话,那么程序不会中断,而是继续执行,并显示一个警告错误。

四、数组

一、数组概念

数组为有序的(键-值)对组成的数据值的集合。根据索引值的不同,数组分为:索引数组和关联数组。

1
2
$day = array("a","b","c");//索引数组
$week = array("a"=>"星期一","b"=>"星期二","c"=>"星期三");//关联数组
二、数组创建

1.使用array()函数 $array = array([mixed ...])

与其他语言的数组实现方式不同,php不需要再创建数组时指定其大小。因为php是一种松散类型的语言,所以甚至不需要在使用前先声明。

索引可以是整型数字或则字符串:

  1. 索引数组:索引为整数,如果没有指定索引值则默认为零,依次递增;
  2. 关联数组:索引为字符串的数组。

2.直接对数组变量赋值 $arr[key] = value

1
2
3
4
$fruits[] = "orange";
$fruits[] = "apple";
$languages["en"] = "english";
$languages["cn"] = "chinese";

如果方括号中没有指定索引,则取当前最大整数索引值,新的键名将是 该值+1。如果当前还没有整数索引,则键名将为0.如果指定的键名已经有值了,该值将被覆盖。

3.使用函数创建数组 range()创建一个包含指定范围单位单元的数组。

1
2
3
4
$num = range(1,100);
print_r($num);
$letter = range("a","l");
print_R($letter);
三、数组的基本操作
  1. unset($arr[0]) 删除数组元素
  2. print_r($arr) 打印数组
  3. count($arr) 取得数组大小
  4. in_array(10,$arr) 检查数组中是否包含某个值
四、遍历数组
  1. for循环变量数组
  2. foreach循环遍历数组
五、数组排序
  1. sort()、rsort()对数组进行升序和降序。
  2. ksort()、krsort()对数组按索引进行升序或降序,并保持索引关系。
六、二维数组

数组元素的值也可以是数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$result = array(
array(
'name'=>'xiaoming',
'age'=>'18',
),
array(
'name'=>'xiaohong',
'age'=>'16',
),
);
//遍历二维数组
foreach($result as $keys => $values){
foreach($values as $key => $value){
echo "我是{$keys}的,我的键是{$keys},我的值是$values<hr/>";
}
}

五、字符串

一、输出字符串

echo 是一个语法,不是函数。echo没有返回值,echo可以输出多个值,使用逗号分隔。

二、其他处理函数

strlen() 获取字符串长度

strtolower() 将字符串转换为小写字母

strtoupper() 将字符串转换为大写字母

三、查找与替换

strpos()

strpos(string,find[,start]) strpos()函数在string中以区分大小写的方式找到find第一次出现的位置;如果没有找到则返回FALSE;可选参数start指定开始查找的位置。

stripos()

stripos()与strpos()功能相同,只是查找时不区别大小写。

str_replace()

str_replace(search,replace,subject[,count])

str_replace()函数在subject中以区分大小写的方式搜索search,用replace替换找到的所有内容;如果没有找到search,则subject保持不变。count对替换数进行计数的变量,不可对其设置。

str_ireplace()

str_ireplace()与str_replace()功能相同,只是不区分大小写。

四、截取字符串

substr()

substr(string,start[,length]) 从start位置取出length长度的字符,字符串位置开始值为0;如果没有指定length,那么默认一直到字符串末尾。

strstr()

strstr(string,search,before_search) strstr()作业从string中搜索search,并根据第三个参数返回search后面的数据还是前面的数据(默认为false,返回search后面的;true,返回search前面的)。

stristr()

stristr()与strstr()功能相同,只是不区分大小写。

五、删除字符串

ltrim()

lstrim(string,[charlist]) ltrim函数删除字符串左侧空格及其他预定义字符;如果未设置charlist参数,则删除一下字符:

  1. “\0” NULL
  2. “\t” 制表符
  3. “\n” 换行
  4. “\x0B” 垂直制表符
  5. “\r” 回车
  6. “ “ 空格

rtrim()

rtrim(string[,charlist]) rtrim函数删除字符串右侧空格或其他预定义字符。

trim()

trim函数删除字符串两侧空格或其他预定义字符。

strrev() 反转字符串

nl2br() 将字符串中换行(\n)转换成HTML换行标签(br/)。

strip_tags()

strip_tags(string[,allowable_tags]) 删除字符串中 HTML XML PHP 标签,可选参数allowable_tags指定要保留的标签。

htmlspecialchars() 函数把一些预定义的字符转换为HTML实体

预定义的字符有:

  1. & (和号) 成为 &amp;
  2. "" (双引号) 成为 &quot;
  3. '' (单引号) 成为 &#039;
  4. < (小于) 成为 &lt;
  5. > (大于) 成为 &gt;
六、数组字符串转换

explode()

explode(separator,string[,limit]) 返回由字符串组成的数组,separator规定在哪里分隔字符串,string要分割的字符串,可选limit规定所返回的数组元素的数目。

implode()

implode([separator,]array) 将数组元素连接成字符串,separator可选规定数组元素之间放置的内容,默认是””(空字符串);array要组合为字符串的数组。