php函数

作者: 咸鱼前端 | 来源:发表于2019-05-30 14:34 被阅读0次
  • 局部变量---动态变量
$i = 2;
$j = 4;
function test1()
{
    echo $i;
    echo $j;
}
test1(); // 此时会报错,因为局部变量,函数不能访问到外部的变量,由于函数执行完会释放变量,所以外部访问不到函数内的变量
  • 局部变量---静态变量
function test2()
{
    static $i = 1; // 如果不是静态变量的话,函数每次执行完就会释放内存,$i每次进来都会是1
    echo $i . "<br>";
    ++$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 "<br>";
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 "<br>";
var_dump($array); // 输出还是之前的数组


echo "<hr>";
$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 "<br>";
var_dump($array); // 输出改变后的数组


echo "<hr>";
$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...<br>";
}
function paly($username)
{
    echo $username . " is playing...<br>";
}
call_user_func('study', 'admin');
call_user_func('paly', 'admin');
echo call_user_func('md5', 'lzq'); // 输出的是md5('lzq')的值
echo "<br>";
function add($x, $y)
{
    return $x + $y;
}
function reduce($x, $y)
{
    return $x - $y;
}
echo call_user_func('add', '1', '3'); //传多个参数的形式,也可以通过下面这种形式
echo "<br>";
echo call_user_func_array('reduce', array(2, 6)); // 输出-4
echo "<br>";
$array = array(1, 6);
echo call_user_func_array('add', $array); // 也行
  • 匿名函数的使用
$func = function () {
    echo "this is a func";
}; //简单的匿名函数
$func();
echo "<hr>";
$func = function ($username) {
    echo "say hello to {$username}";
}; // 带参数的匿名函数
$func("lzq");
echo "<hr>";
// 通过create_function来创建匿名函数
$func = create_function('', 'echo "这是通过create_function创建的匿名函数";'); // 通过create_function创建基本的匿名函数
$func();
echo "<hr>";
$func = create_function('$x,$y', 'echo $x+$y;'); // 通过create_function创建带有参数的匿名函数
echo $func(1, 5);
echo "<hr>";
$func = call_user_func(function ($username) {
    echo "say hello to {$username},这是通过call_user_func创建的带有参数的匿名函数";
}, 'lzq');
  • 递归函数
function test($i)
{
    echo $i . "<br>"; //3
    --$i; //2
    if ($i >= 0) {
        $func = __FUNCTION__;
        $func($i); //test(2)
        /*
            echo $i . "<br>"; //2
            --$i; //1
            if ($i >= 0) {
                $func = __FUNCTION__;
                $func($i); //test(1)
                    echo $i . "<br>"; //1
                    --$i; //0
                    if ($i >= 0) {
                        $func = __FUNCTION__;
                        $func($i); //test(0)
                            echo $i . "<br>"; //0
                            --$i; //-1
                            if ($i >= 0) {
                                $func = __FUNCTION__;
                                $func($i);
                            }
                            echo $i . "<br>"; //-1
                    }
                    echo $i . "<br>"; //0
            }
            echo $i . "<br>"; //1
        */
    }
    echo $i . "<br>"; //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参考手册

    PHP参考手册 PHP array() 函数 PHP array_change_key_case()函数 PHP ...

  • PHP中一些函数方法

    php自定义函数之递归函数 php自定义函数之静态变量 php​ 使用系统内置函数 亚麻跌”是PHP学习时间处理的...

  • 从0到1学习网络安全 【PHP基础-PHP 函数】

    PHP 函数 PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。 PHP 用户定义函数 除了内建...

  • 三. PHP与MySQL关系大揭秘

    PHP内置MySQL函数学习(1) PHP内置MySQL函数学习(2) PHP内置MySQL函数学习(2)

  • 九月四号

    PHP函数之内置函数 内置函数指的是PHP默认支持的函数,PHP内置了很多标准的常用的处理函数,包括字符串处理、数...

  • 搜藏经典

    PHP 16个魔术方法 PHP 数组函数 PHP 字符串函数 PHP 超全局变量 PHP 面向对象的理解以及三大特...

  • PHP性能优化

    1 PHP语言级性能优化:少些代码,多用PHP自身能力;(多用PHP内置变量,常量,函数) PHP内置函数的性能不...

  • 2019-01-09【PHP跳转页面】

    PHP跳转页面的几种实现方法详解 •PHP页面跳转一、header()函数 header()函数是PHP中进行页面...

  • PHP面试中常遇到的问题(逐步完善答案)

    PHP相关 1、PHP基础函数使用:数组*、字符串、时间函数、数学函数、 max min array_splice...

  • PHP代码审计-常见危险函数

    PHP代码执行函数 eval & assert & preg_replace eval 函数 php官方手册:ht...

网友评论

      本文标题:php函数

      本文链接:https://www.haomeiwen.com/subject/pzozzqtx.html