PHP
流程控制
- if else判断
//php的流程控制 适合在写html嵌套
$status = false;
$num = 1;
if($status):
echo '1';
else:
echo '0';
endif;
echo '<hr/>';
if($num > 1):
echo $num;
elseif ($num >2):
echo $num;
elseif ($num >3):
echo $num;
else:
echo $num;
endif;
-
switch判断
/** * 适用于有判断有规律的 * */ $status = 'error'; switch ($status) { //这样写适合判断多种可能性 相当于 或 case 'success': case 'abc': echo 'abc'; break; case 'error': echo 'error'; break; default: echo 'none'; break; } -
while循环
//while循环 $num = 10; while($num>0){ echo ($num--).'<hr/>'; } -
do while循环
// do while循环 do { if(is_null($num)){ $num=10; } echo $num--; } while ($num > 0); do { if(!isset($num)){ $num=10; } if($num==0){ break; } echo $num--; }while(true);while和do while循环的区别就是先判断还是先执行
文件引入
- include和require语句用于在执行流中插入写在其他文件中的有用的代码,二者除了处理错误的方式不同之外,其他方面都是相同的。
- include是抛出一个警告可继续执行;
- require是抛出一个致命不可继续执行。
- 已经用include或者require加载过一个文件的方法,再另一个页面中也加载了该页面这样会报错,方法被定义。只需要把导入的方式改成include_once或require_once这样就不会报错
- include_once和require_once都是来保证不会被多次加载的,控制一次加载。
php函数
-
函数是有返回值的,即使里面没有数据也有返回值,值为null
function user(){ // return 'lin'; } var_dump(user()); //null -
命名空间namespace
-
可以用命名空间来隔离函数,因为当我们导入多个文件的时候,难免函数名的污染,有个别文件中的函数命名可能会一直,所以我们可以使用namespace的方法来隔离这样的情况发生
-
文件 1
<?php namespace one; function show(){ echo 1; } -
文件 2
<?php namespace Two; function show(){ echo 2; } -
调用1、2的文件
<?php require '1.php'; require '2.php'; echo one\show(); echo '<hr/>'; echo Two\show();
-
-
函数传值传址
function mobile($tel){ return substr($tel, 0, -4).'****'; } echo mobile('12222222222').'<br/>'; function show ($var){ //传值 $var++; echo $var; } /* * 传值和传址 * 传值相当于copy开辟一个新的内存地址,传址就是俩个对象指向同一个内存地址 */ function show (&$var){ //传址 $var++; echo $var; } $var = 1; show($var); echo '----------------'; echo $var; -
点语法
- 方便我们对传参的赋值
//点语法 function sum(...$vars) { //print_r($vars); return array_sum($vars); } echo sum(1,2,45,4,8,7,4,5,6); -
严格模式
- 严格模式限定了,代码的稳定性,使得代码更加严谨
/* 严格模式 */ declare(strict_types = 1); function show(int ...$num){ //int是限定了参数的类型,确保了参数的健壮 return array_sum($num); } try { echo sum(1,2,3,4,5,6,'7'); } catch (\Throwable $th) { $th -> getMessage(); echo '出现错误'.$th; }-
如果参入的值,有空值,那么我们可以这样来写
?sting这样可以让空值也传进来,但是要明确的返回一个null虽然函数默认返回null,但这样是不行的,必须是明确的返回一个null
/*如果参入的值,有空值,那么我们可以这样来写。这样可以让空值也传进来,但是要明确的返回一个null 虽然函数默认返回null,但这样是不行的,必须是明确的返回一个null */ function sum(): ?string{ // return 1; //这样会报错因为,这里限定了参数为string类型 return null; } echo sum();
-
拿到函数作用域之外的变量,的几种方式
/* 传址 */ $name = '琳'; function show(&$name){ echo $name; } show($name);/* global引入 */ $name = '琳'; function show($name){ global $name; echo $name; } show($name);/* 超全局数组 */ $name = '琳'; function show($name){ echo $GLOBALS['name']; } show($name); -
静态变量
- 只会执行一次,并且使变量的值永久保留在函数体中
function sum(...$nums): int { static $count = 0; //他只会第一次执行函数的时候执行,下一次就不会再执行,使变量在函数体内持久保留 return $count += array_sum($nums); } echo sum(1,2,3); echo '<br/>'; echo sum(1,2,3); -
变量函数
- 把函数当初值,赋值给变量,使变量有函数的作用
function sum(){ return 'function.cn'; } $fun_var = 'sum'; echo $fun_var();-
字符串截取函数
//使用字符串截取函数 $file = 'hack.jpg'; $action = strtolower(trim(strrchr($file,'.'),'.')); echo $action;
-
递归函数
- 递归函数就一直执行某一个工作,直至退出点的出现。
- 递归和循环类似。
- 递归是不断的调用自身,如果不加以控制就会直至栈溢出,递归经常调用函数,开销大(内存、时间)。
- 循环是不断的执行某一段代码,直至死循环。
function recursive($num) {
if ($num == 1) {
return $num;
}
return $num * recursive($num-1);
}
echo recursive(2);