php函数

  • 局部变量---动态变量
$i = 2;
$j = 4;
function test1()
{
    echo $i;
    echo $j;
}
test1(); // 此时会报错,因为局部变量,函数不能访问到外部的变量,由于函数执行完会释放变量,所以外部访问不到函数内的变量
  • 局部变量---静态变量
function test2()
{
    static $i = 1; // 如果不是静态变量的话,函数每次执行完就会释放内存,$i每次进来都会是1
    echo $i . "
"; ++$i; } test2(); test2(); test2(); test2();
  • 全局变量---global
$m = 3;
$n = 5;
function test3()
{
    global $m, $n;
    echo $m, $n; // 原来不加global的话,这里是会报错的,加上global的话就是全局变量,所以函数内也能访问到外部的变量
}
test3();
  • 全局变量---GLOBALS
function test4()
{
    var_dump($GLOBALS); // 此时会打印当前所有定义的变量,变量名作为数组的键,变量的值作为数组的值
    echo $GLOBALS['m']; // 此时这里会打印之前定义过的$m,值为3
}
test4();

PHP传值和传引用

  • PHP传值
function test($m)
{
    $m += 20;
    var_dump($m);
}
$m = 5;
test($m); // 25
var_dump($m); // 5
  • PHP传引用
function test(&$m)
{
    $m += 20;
    var_dump($m);
}
$m = 5;
test($m); // 25
test(3); // 当函数定义的是需要传引用,此时不能传值,需要传变量名
var_dump($m); // 5
  • 可变函数
$funcName = "md5";
echo $funcName("KING"); // $funcName相当于是md5
echo "
"; echo md5("KING"); print_r(get_defined_functions()); // 能获得所有的函数
image.png

可变函数不可用于以上类似的语言结构

  • 回调函数
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
function test1($var)
{
    return $var *= 2;
}
$res = array_map('test1', $array);
var_dump($res); // 输出改变过后的数组
echo "
"; var_dump($array); // 输出还是之前的数组 echo "
"; $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9); function test2(&$var) { $var *= 5; return $var; } $res2 = array_walk($array, 'test2'); var_dump($res2); // 执行成功之后返回true,失败返回false,因为传的是引用,所以改变了数组 echo "
"; var_dump($array); // 输出改变后的数组 echo "
"; $array = array(1, 2, 3, 4, 5, 6, 7); function odd($var) { if ($var % 2 == 1) { // 如果除以2有余数,说明是奇数,输出 return $var; } } $res = array_filter($array, 'odd'); var_dump($res); // 1,3,5,7
  • call_user_func和call_user_func_array的使用
function study($username)
{
    echo $username . " is studying...
"; } function paly($username) { echo $username . " is playing...
"; } call_user_func('study', 'admin'); call_user_func('paly', 'admin'); echo call_user_func('md5', 'lzq'); // 输出的是md5('lzq')的值 echo "
"; function add($x, $y) { return $x + $y; } function reduce($x, $y) { return $x - $y; } echo call_user_func('add', '1', '3'); //传多个参数的形式,也可以通过下面这种形式 echo "
"; echo call_user_func_array('reduce', array(2, 6)); // 输出-4 echo "
"; $array = array(1, 6); echo call_user_func_array('add', $array); // 也行
  • 匿名函数的使用
$func = function () {
    echo "this is a func";
}; //简单的匿名函数
$func();
echo "
"; $func = function ($username) { echo "say hello to {$username}"; }; // 带参数的匿名函数 $func("lzq"); echo "
"; // 通过create_function来创建匿名函数 $func = create_function('', 'echo "这是通过create_function创建的匿名函数";'); // 通过create_function创建基本的匿名函数 $func(); echo "
"; $func = create_function('$x,$y', 'echo $x+$y;'); // 通过create_function创建带有参数的匿名函数 echo $func(1, 5); echo "
"; $func = call_user_func(function ($username) { echo "say hello to {$username},这是通过call_user_func创建的带有参数的匿名函数"; }, 'lzq');
  • 递归函数
function test($i)
{
    echo $i . "
"; //3 --$i; //2 if ($i >= 0) { $func = __FUNCTION__; $func($i); //test(2) /* echo $i . "
"; //2 --$i; //1 if ($i >= 0) { $func = __FUNCTION__; $func($i); //test(1) echo $i . "
"; //1 --$i; //0 if ($i >= 0) { $func = __FUNCTION__; $func($i); //test(0) echo $i . "
"; //0 --$i; //-1 if ($i >= 0) { $func = __FUNCTION__; $func($i); } echo $i . "
"; //-1 } echo $i . "
"; //0 } echo $i . "
"; //1 */ } echo $i . "
"; //2 } test(3); /** * 输出结果是3,2,1,0,-1,0,1,2 */
  • 自定义函数引入

require、require_once、include、include_once共四种方法

require "header.php"; // 可以多次包含引入,多次显示,如果文件不存在,使用require则会有一个警告和一个致命错误,程序不运行
require_once "header.php"; // require_once只会包涵一次,之后都不会再出现,require则会一直包含显示
echo "我是主体内容";
include('footer.php'); 
/*也可以多次包含引入,如果文件不存在,使用include则会有两个警告,程序不影响运行,include_once与require_once同等效果*/

例如一些FILE或者d__LINE__,如果包含的文件中有这些输出,则会显示原本的文件名和文件行号,不是显示在引入文件中的行号和文件名

你可能感兴趣的:(php函数)