PHP之函数从入门到精通

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42380348/article/details/100166366
<?php 

header("content-type:text/html;charset=utf-8");
echo mt_rand(1000,9999);//生成随机数
echo "<hr />";
echo strlen('KING123').'<br>';//获取指定字符串的长度
echo strtolower('KING').'<br>';//将字符妆化为小写
echo strtoupper('king').'<br>'; //将字符转化为大写
//php自定义函数
/*
 函数不调用不执行,当封装完函数之后将其载入到内存中,当调用函数的时候,找到对应的函数,执行函数体,当碰到Return语句或者执行到函数的末尾,在将控制权移交到函数的位置上,接着程序继续向下执行

function 函数名[参数名称=[值]]{
	函数体;
	return 返回值;
}

注意:
	函数名称不能包含特殊字符,以字母或者数字下划线开始,跟上数字字母下划线
	函数名称最后以动词开始,最好含义明确,如getExt()  uploadFile()
	函数名称遵循驼峰命名法或者下划线
	函数名称是不区分大小写,但是尽量遵循函数大小写进行调用
	函数名不支持重名的,如果重名会报致命错误
	函数可以有参数,也可以没有参数
	函数可以返回值,也可以没有返回值 return 返回值;
	检查函数名是否存在的函数
	function_exists($funcname):如果函数存在返回true 不存在返回false
 */



// 函数的返回值:
// 函数只可以有0个或一个函数值,如果想要返回多个值,可以通过返回数组或对象实现	
 function test(){
 	return 10==0;
 }
echo test();

//参数的例子
//返回一个3行两列的表格
//通过不断去修改需要来引出参数的重要性
function table($rows,$cols){
	$table = "<table border='1' cellpadding='0' cellspacing='0' width='180px'>";
	for($i = 1;$i <= $rows; $i++){
		$table.="<tr>";
		for($j=1;$j<=$cols;$j++){
			$table.="<td>x</td>";
		}
		$table.="</tr>";
	}
	$table.="</table>";
	return  $table;
}
echo table(3,5);

//创建一个默认表格,默认式3行5列,表格的默认颜色是红色
function table1($rows=5,$cols=6,$content='xoxo'){
	$table = "<table bgcolor='red' border='1' cellpadding='0' cellspacing='0' width='500px'>";
	for($i = 1; $i < $rows; $i++){
		$table .="<tr>";
		for($j=1;$j<$cols;$j++){
			$table.="<td>{$content}</td>";
		}

	}
	$table.="</table>";
	return $table;
}
echo table1();

//变量的作用域
/*局部变量
	函数体内声明的变量为局部变量
	局部变量分为动态变量和静态变量
		动态变量
			函数执行完毕,会立即释放变量
		静态变量
			通过stati关键字声明的变量为静态变量,当第一次调用函数的时候相当于初始化静态变量,当函数执行完毕之后静态变量没有释放而是保存在静态内存中,当再次调用函数的时候首先从静态内存中取出变量的值接着执行
全局变量
	函数体外声明的变量或者在函数内通过global关键字声明的变量为全局变量
*/
// 局部--动态变量
function variable(){
	$i = 1;
	echo $i . "<br />";
	$i++;
	
}
variable();
variable();
echo "<hr / >";
//局部--静态变量--变量值会保存在静态内存中
function variable1(){
	static $i = 1;
	echo $i . "<br>";
	$i++;
	
}
variable1();
variable1();
//在函数内部使用全局变量 global和$GLOBALS
$variable = 'aasdf';
$variable1 = 123456;
function variable2(){
	global $variable;
	echo $variable;
	global $mm; //通过global在函数内部声明全局变量
	$mm = '变量';
	// global $nn = 123456; //不可以直接这样进行定义

}
variable2();
echo $mm . '<br>';

//通过全局变量$GLOBALS在函数内部使用全局变量
$name = 'cool';
function variable3(){
	echo $GLOBALS['name'];
} 
variable3();

echo "<hr>";
/*函数传值和传引用的区别
 	传值:默认情况下,函数参数通过传递,函数不会改变参数原有的值,只会生成新的值(需要变量接收,否则就会丢失), strtolower()
 	引用:可以通过在参数前添加&符号,代表通过引用传递参数,在函数内部对其所做操作影响参数本身

*/
//传值不会改变变量本省
$byValue1 = 123;
function byValue($byValue){
	$byValue++;
	echo $byValue;
}
byValue($byValue1);
echo '<br>' . $byValue1;
//引用会改变变量的值
$cite = 20;
function cite(&$a){
	$a++;
	echo  '<br>'.$a;
}
cite($cite);
echo "<br>" . $cite;

echo "<hr>";
/*
PHPz中特殊形式的函数
	可变函数
		在php中如果将“函数名称”赋予字符串类型的变量,但是在使用该变量时,如果带有小括号,那么PHP引擎解析函数
	递归函数
		如果函数A需要调用函数B,而发现函数B的代码实现与函数A完全相同,依次类推,此时就需要封装为递归函数
			像PHP实现目录的遍历,目录的复制、删除非空目录操作必须通过递归函数的是实现
			像无极限分类也可以通过递归实现
	匿名函数
		也叫闭包函数,允许零时创建一个没有指定名称的函数,最近常用作回调函数参数的值。
		匿名函数也可以作为变量的值
	回调函数
		回调函数就是调用函数的时候将另外一个函数的名称当作参数传递进去,并且在函数体中进行调用
	可变参数
*/
//可变函数的使用
$change = 'md5';
echo($change('123456'));//这里成功从字符串变为函数, 因为函数名随时可变,所以称为可变函数
// 注意:可变函数不能用于像echo, print, unset(),isset(),empty(),include(),require()以及类似的语言结构,需要自己封装之后实现
echo "<hr>" . "回调函数";

//回调函数
function study(){
	echo 'studying....<br>';
}
function play(){
	echo "playing...<br>";
}
function sing(){
	echo 'sing....<br>';
}
function dowhat($funcname){
	echo "我正在";
	//通过可变函数的形式进行调用
	$funcname();
}
dowhat('study');
//get_defind_functions() 获取内置函数和自定义函数
echo "<pre>";
// var_dump(get_defined_functions());

echo "<hr>"."匿名函数";
$func = function(){
	return 'thid is a test';
};
echo $func();
echo "<hr>" . "带参数的匿名函数";
$func1=function($usename){
	return 'say hi to '.$usename;
};
echo $func1("king");

//通过create_function()
$func2 = create_function('', 'echo "<br>this is a function";');
echo $func2();
$func3 = create_function('$x,$y', 'return $x+$y;');
echo "<br>". $func3(3,5);

$array = [1,2,3,4,5];
$res = array_map(function($var){return $var*2;}, $array);
print_r($res);//array_map()是对数组中的每一个值进行操作

call_user_func(function($username){echo "hello {$username}";},'king');

echo "<hr>" . "递归函数<br>";
//递归示例
function recursion($i){
	echo $i . '<br>';
	--$i;
	if($i>=0){
		recursion($i);
	}
}
recursion(5);

function recursion1($i){
	echo $i . "<br>";//3
	if($i >= 0){
		recursion1($i - 1);//2
		/*
		  echo $i.'<br>';//2
		  if($i >= 0){
			recursion($i - 1);//recursion(1)
			echo $i.'<br>';//1
			if($i >= 0){
				recursion($i-1);//recursion(0);
				echo $i.'<br>';//0
				if($i >= 0){
					echo $i ."<br>";//recursion(-1)
					echo $i . "<br>";//-1;
					if($i >= 0){
						recursion($i-1);
					}
					echo $i."<br>";//0
				}
				echo $i .'<br>';//1
			}
			echo $i . "<br>";//2
		  }



		*/
	}
	echo $i."<br>";//3
}
recursion1(3);

//优化上面的代码
echo "<hr>" ;
function recursion2($i){
	echo $i."<br>";
	if($i >= 0){
		$func = __FUNCTION__;//recursion
		$func($i - 1);
	}
	echo $i . "<br / >";
}
recursion2(3);

echo "<hr>";
//包含文件
// include 和 require的区别
//通过require/require_once包含的问价不存在会产生一个致命错误和一个错误,程序终止执行
//通过include/include_once包含的文件,如果文件不存在,会产生两个警告,程序会继续执行
//带once的包含超过一次的只出现一次
// require()
// require_once()
// include()
// include_once()
?>

猜你喜欢

转载自blog.csdn.net/weixin_42380348/article/details/100166366