文章目录
0x01 替代语法
在混编的时候会用替代语法,php中除了do-while以外,其他的语法结构都有替代语法,替代规则:左大括号变冒号,右大括号变endXXX
//if的替代语法
if():
elseif():
else:
endif;
//switch替代语法
switch():
endswitch;
//for
for():
endfor;
//while
while():
endwhile;
//foreach
foreach():
endforeach;
在混编的时候用替代语法
<body>
<?php
for($i=1;$i<10;$i++):
if($i%3 == 0):
?>
<?= $i ?>--> hello,world <br>
<?php
endif;
?>
</body>
/*
运行结果:
3-- hello,world
6-- hello,world
9-- hello,world
*/
else if 之间如果有空格是 嵌套if语句,没有空格是多分支if。下面用替代语法来说明
<?php
$score=80;
if($score>=90):
echo 'A';
else:
if($score>=80):
echo 'B';
else:
echo 'C';
endif;
endif;
0x02 函数
2.1 函数定义与调用
函数定义格式:
function 函数名(参数1,参数2,...){
//函数体
}
代码示例:
<?php
function eat(){
echo '人要吃饭<br>';
}
eat(); //调用eat()函数
eAt(); //函数名不区分大小写
/*
运行结果:
人要吃饭
人要吃饭
*/
2.2 可变函数
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数
<?php
function eat(){
echo '人要吃饭<br>';
}
function e
$str = 'eat';
$str();
/*
运行结果:
人要吃饭
*/
2.3 匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
<?php
$str = function(){
echo 'hello,world!';
}; //这里要加上分号。
echo $str(),'<br> talk is cheap<br>show me code';
/*
运行结果:
hello,world!
talk is cheap
show me code
*/
2.4匿名函数中使用use()
<?php
/**
* @description 匿名函数中使用use()
* 默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中
* 应用场景:见测试代码
* @author baola
* @create 2020-06-10 10:28
*/
#测试代码如下:
$name = 'baola';
$num = 10;
#测试一
$fun = function()use($name){
echo '测试一:'.$name.'<br>';
};
$fun();
#测试二 嵌套匿名函数
$fun1 = function() use($num) {
$fun = function () use ($num) { //只能引入一层
echo '测试二:'.$num.'<br>';
};
$fun();
};
$fun1();
#测试三:多个同名变量下,use()的使用
function fun2() {
$num =20;
$fun = function () use ($num) { //这里有两个num只输出最近的那一个num
echo '测试三:'.$num.'<br>';
};
$fun();
}
fun2();
#测试四:use可以引入值,也可以引入地址
$fun3 = function () use (&$num) { //use可以传地址
$num = 100;
};
$fun3();
echo '测试四:'.$num; //100
运行结果:
2.5递归
<?php
/**
* @description 递归
* 递归:函数中调用函数
* 递归的出口一定在递归点的上面
* @author baola
* @create 2020-06-11 9:07
*/
/**
* 练习1:用递归从1加到100
*/
function add($num){
if($num == 1 )//递归出口
return 1;
return $num + add($num - 1); //递归点
}
print("前100个数相加".add(100)."<br>");
/**
* 练习2:打印斐波那契数
* 1,1,2,3,5
*/
function fbnqadd($num){
if( $num == 1 || $num ==2){
return 1;
}
return fbnqadd($num-1) + fbnqadd($num - 2);
}
echo '第十个斐波那契数'.fbnqadd(10);
0x03 参数传递
3.1 值传递
默认的情况下参数的传递是值传递,值传递就是将实参的值复制一份给形参,形参和实参有各自的地址,互不干扰。
<?php
function modify($age,$name){
$age = 19;
$name = "snake";
}
$age = 18;
$name = "tiger";
modify($age,"{$name}");
echo "{$name} age is ${age}";
?>
运行结果:
3.2地址传递
说明:
1、&$name 表示取$name的地址;
2、使用地址传递传递的是变量的地址。由于形参和实参的地址相同,形参的修改会直接影响到实参的值。
3、函数的参数默认是值传递
4、如果要传递地址,在参数前面加&
5、如果是地址传递,不能直接写值,要写变量
<?php
function modify(&$age,&$name){
$age = 19;
$name = "snake";
}
$age = 18;
$name = "tiger";
modify($age,$name);
echo "{$name} age is ${age}";
?>
运行结果():
3.3默认参数和参数个数不匹配
<?php
/**
* @discription
* 1.参数个数不匹配问题
* 1.当实参个数小于形参时,报错。
* 2.当形参个数多于实参时,参数列表从左到右依次取对应的值,剩下的值被丢弃
* 2.如果获取所有参数?
* func_get_args():获取所有参数列表的值,返回一个数组。
* func_num_args();返回形参的个数
*
* @author baola
* @create 2020-05-29 14:49
*/
function show($name,$grade){
echo "{$name}'s score is {$grade}";
$num = func_num_args();
$formPars = func_get_args();
echo "the number of parameter is {$num} and form Parameter is ";
print_r($formPars);
}
$name = "张三";
$grade = "100";
// show($name); 报错
show($name,$grade,100000);//参数列表从左到右依次取对应的值
3.4 参数约束
<?php
/**
* 1.定义变长参数
* 在形参中使用...$name的形式表示获取所有的参数,将参数一个数组的形式存储
* 在实参中使用...$name的形式表示拆分数组中的元素从左到右依次赋值给对应的形参列表中的元素
* 如果不对应,则会发出警告。
* 2.参数类型约束
* 在函数形参中指定元素类型,定义类型:function 函数名(类型 形参1,类型 形参二,...){函数体},如果形参和实参类型不一致,直接报错
* 3.返回值约束
* 定义形式:function 函数名(形参列表):返回值类型{函数体} 如果指定了返回值类型,而没有return,会发出警告,可以约束:string、int、float、bool、数组。而void(无返回值)在7.1以后的版本中才支持。
* @discription
* @author baola
* @create 2020-05-29 15:53
*/
//1.定义变长参数
function VarConstraintTest($name1, $name2){
var_dump($name1, $name2);
}
VarConstraintTest("hello", "world");
$name = array("zhagnsan", "LiSi");
VarConstraintTest(...$name);//
//2.参数类型约束
function var_test(string $name,int $age){
echo "name is {$name} and age is {$age}";
}
var_test("doby",18);
//3.返回值约束
function re_test(string $name,int $age):int{
echo "hello,my name is {$name} and ";
return $age;//如果没有return,会发出警告
}
echo "my age is ".re_test("doby",18);
0x04 return
<?php
/**
* return的作用
* 1.在php中作为单独一个语句它可以终止脚本的运行
* 2.如果包含文件中含有return;只会终止包含文件本身,不会终止原文件本身。
* 3.返回包含文件页面结果
* 4.在函数中有两个作用
1、终止函数执行
2、返回值
* @discription
* @author baola
* @create 2020-05-29 15:03
*/
//require "FunctionTest1.php"; //在FunctionTest1.php中含有return;
function show1($name, $age)
{
echo " name is {$name} and age is ";
return;
echo $age;
}
show1("张三", 19);
// 3.返回页面结果
$hello = require "./assistTest.php";
print_r($hello);