美文网首页
PHP 的函数 -- PHP 学习 (五)

PHP 的函数 -- PHP 学习 (五)

作者: 无故下架内容so账号已弃用 | 来源:发表于2019-04-20 22:57 被阅读0次

函数是什么

暂且先记住这句话:
能够将一段代码封装成一个处理某个特定问题的代码块, , 通过调用的方式来执行, 从而简化代码编写的方法

函数结构分析

<?php
    // 函数定义
    function get_sum($a, $b) {
        return $a + $b;
    }

    // 函数的调用
    $sum = get_sum(2, 3);
    echo $sum; // 5
?>

构成部分:

  1. 关键字: function

  2. 函数名: get_sum

    命名规则: 有效的函数名以字母或下划线开头, 后面可以跟着字母, 数字或下划线

  3. 参数列表: ($a, $b)

  4. 函数体: { return $a + $b }

  5. 返回值: return $a + $b;

    定义:
    (a) 值通过使用可选的返回语句返回
    (b) 可以返回数组和对象的任意类型
    (c) 返回语句会立即终止函数的运行, 并且将控制权交回调用该函数的代码行

为什么要使用函数

例子: 从一组数据中找出最大的数

<?php
    // 从第一组数据中找出最大的数
    $arr1 = array(3, 99, 789, 34, 43, 435);
    $max1 = $arr1[0]; // 先将数组的第一个数据设为最大值
    foreach($arr1 as $v1) {
        // 如果当前的 $max1 小于$v1
        if ($max1 < $v1) {
            $max1 = $v1;
        }
    }
    echo $max1; // 789

    echo '<br />';

    // 从第二组数据中找出最大的数
    $arr2 = array(34, 45, 5463, 2452, 32452);
    $max2 = $arr2[0]; // 先将数组的第一个数据设为最大值
    foreach($arr2 as $v2) {
        // 如果当前的 $max2 小于$v2
        if ($max2 < $v2) {
            $max2 = $v2;
        }
    }
    echo $max2; //32452

    // 如果多组数据...
?>

上面的代码实现了对一组数据取最大值,
如果我们有很多组这样的数据要取最大值,
那么就要重复的编写上面代码, 但这样是很浪费的一种行为, 这时候我们就可以通过封装一个函数的方法, 通过调用函数的方式来简化我们的编码:

<?php
    // 取最大值
    function max_num($arr) {
        $max = $arr[0]; // 先将数组的第一个数据设为最大值
        foreach($arr as $v) {
            // 如果当前的 $max1 小于$v1
            if ($max < $v) {
                $max = $v;
            }
        }
        return $max;
    }

    // 从第一组数据中找出最大的数
    $arr1 = array(35,34532,567,564,345);
    $max_val1 = max_num($arr1);
    echo $max_val1; // => 34532

    echo '<br />';

    // 从第二组数据中找出最大的数
    $arr2 = array(7894, 45, 345, 45, 56, 5);
    $max_val2 = max_num($arr2);
    echo $max_val2; // => 7894

    echo '<br />';

    // ...
?>

函数特性介绍

<?php
    function get_sum($a, $b) {
        
        $result = $a + $b;
        
        return $result;
    }

    // 函数的调用
    $sum = get_sum(2, 3);
    echo $sum;
?>
  • 函数形参与实参

    $a, $b 是函数的形参,
    2 , 3 函数调用的实参, 实参可以是表达式, 变量等

    形参和实参的数目对应关系:

    (a) 如果 实参数目 < 形参数目: 程序报错/警告

    (b) 如果 实参数目 = 形参数目: 参数会一一对应

    (c) 如果 实参数目 > 形参数目: 程序会正确执行, 形参的值会一一对应, 比如 get_sum(2, 3, 4, 5), 那么 $a = 2, $b=3


  • 函数的默认值
func ($a, $b, $c, $d = 'default')
{ 
    // .. 
}

上面给了第四个变量设置的默认值, 如果传参的时候没有传第四个参数, 则第四个参数的值为 default

例子:

<?php
    // 函数定义
    function get_sum($a, $b, $c = 60) {

        $result = $a + $b + $c;

        return $result;
    }

    // 函数的调用
    $sum = get_sum(2, 4);
    echo $sum.'<br />'; // 结果: 2 + 4 + 60 = 66
    $sum2 = get_sum(2, 4, 100);
    echo $sum2; // 结果: 2 + 4 + 100 = 106
?>

  • 函数强类型参数

定义: 为参数列表中的参数指定类型, 如果传入的数据类型不匹配, 将会抛出 TypeError 异常,

支持类型:
PHP 5.0.0: class/interface name
PHP 5.1.0: array
PHP 5.4.0: callable
PHP 7.0.0: bool, float, int, string

function get_sum(int $a, int $b) {

        $result = $a + $b;

        return $result;
    }

  • 函数可变参数列表

PHP 5.5及更早版本:
func_num_args(): 返回参数的总数量
func_get_arg(): 返回参数列表的某一项
func_get_args(): 返回一个包含函数参数列表的数组

<?php
    function test() {
        echo '参数总数: ', func_num_args().'<br />'; // 参数总数: 4
        echo '第一个参数: ', func_get_arg(0).'<br />'; // 第一个参数: 1
        echo '全部参数: '; // => 全部参数: 
        print_r(func_get_args()); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
    }
    test(1, 2, 3, 4);
?>

PHP 5.6+:
使用 ... 语法实现:

<?php
    function test(...$args) {
        echo $args[0].'<br />'; // => 1
        echo count($args).'<br />'; // => 4
        print_r($args); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
    }
    test(1, 2, 3, 4);
?>

  • 函数值传递与引用传递

值传递: 不会改变原来实参的值

<?php
    function test($num) {
        $num = 5;
        $result  = $num + 1;
        return $result;
    }

    $num = 4;
    $res = test($num);
    echo $res.'<br />'; // => 6
    echo '$num: '.$num; // => $num: 4 ,$num 的值并没有被修改
?>

引用传递: 通过 & 来实现, 赋值给形参的是引用地址

<?php
    function test(&$num) {
        $num = 5;
        $result  = $num + 1;
        return $result;
    }

    $num = 4;
    $res = test($num);
    echo $res.'<br />'; // => 6
    echo '$num: '.$num; // => $num: 4 ,$num 的值也改变了
?>

  • 函数变量作用域

局部变量:

  1. 当前页面中声明的普通变量, 不能在函数中或者类中起作用;
<?php
    $a = 12;
    function test() {
        echo $a; // => 报错: Undefined variable: a
    }

    test();
?>
  1. 当前页面中声明的普通变量, 不能被传递到其他页面;
  2. 在函数中声明的普通变量, 在函数内部有效;
<?php
    function test() {
        $a = 12;
    }
    test();
    echo $a; // => 报错: Undefined variable: a
?>
  1. 在类中声明的属性, 在类的内部有效;

全局变量 global

对于 PHP 而言, 可以这么说, 在页面中生成的变量都是全局变量, 在整个页面都是有效, 但是不能被函数或者类中的方法访问;

如果想被函数或者类中的方法访问, 我们就有了超全局变量:
$_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST, $_SEESION

<?php
    $a = 12;
    $b = 24;
    $c = 29;
    function test() {
        global $b;
        echo $a; // => Undefined variable: a
        echo $b.'<br />'; // => 24
        echo $GLOBALS['c']; // => 29
    }

    test();
?>

global 和 GLOBALS 使用的区别: global 是外部同名变量的引用, 而GLOBELS 外部的全局变量的本身

静态变量 static

函数内部声明的变量, 函数执行完即销毁,
而通过 static 声明的静态变量. 函数执行完之后并未丢失

<?php
    function test() {
        $a = 1;
        $a++;
        echo $a;
    }

    test(); // => 2
    echo '<br />';
    test(); // => 2
    // ...
?>

通过 static 标识的静态变量

<?php
    function test() {
        static $a = 1;
        $a++;
        echo $a;
    }

    test(); // => 2
    echo '<br />';
    test(); // => 3
    echo '<br />';
    test(); // => 4
?>

参考资料:
https://www.imooc.com/learn/827
http://www.php.cn/php-weizijiaocheng-390860.html

相关文章

  • 三. PHP与MySQL关系大揭秘

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

  • PHP中一些函数方法

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

  • PHP 的函数 -- PHP 学习 (五)

    函数是什么 暂且先记住这句话:能够将一段代码封装成一个处理某个特定问题的代码块, , 通过调用的方式来执行, 从而...

  • PHP学习总结

    PHP自学计划记录 当前只学习了PHP的基础语法,没有涉及很多PHP内部提供的函数 学习目录:PHP自学计划-注释...

  • PHP参考手册

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

  • PHP 学习笔记(一)

    为了拓展知识面,学习了一些PHP的相关知识,汇总、分享。 PHP --- 字符串函数 PHP 常量 PHP--- ...

  • 2018 10 19

    继续学习常用php原生函数

  • Yii2 PHP框架

    自动加载函数 Yii2 PHP框架学习记录--自动加载函数 常量 Yii2 PHP框架学习记录-常量 $_SERV...

  • 搜藏经典

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

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

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

网友评论

      本文标题:PHP 的函数 -- PHP 学习 (五)

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