(四)PHP自定义函数的概述

[复制链接]
发表于 2025-11-8 15:01:45 | 显示全部楼层 |阅读模式
一,自定义函数的概述


概念: 完成指定任务的功能代码块

格式:
function  函数名( 参数1, 参数2...)
{
        函数体(语句)
        return 返回值
}
函数名( 参数1, 参数2...);

作用
给一段代码起一个名字,  以后写名字 ,  代码就会执行.  即调用.   通过名字 , 可以多次调用.

特点
1)  变量要先定义赋值才可以输出, 但函数的定义和调用不分先后顺序的  函数的定义代码, 会被提前放到内存.
2)  函数定义了, 不调用就不执行.
3)  函数名不区分大小写. 但推荐要一致.
4)  在同一个文件中不能出现相同名字的函数



二,变量作用域(范围)


由于函数的出现,导致变量的能见度(生命周期)不同.  共划分为:全局变量、局部变量、 静态变量


1). 全局变量:    在函数外定义变量

  作用域 : 在整个php文件中都可以被使用的变量

<?php
        //变量的作用域:全局变量

        $a=10;//定义一个变量a值为10
        $b=20;
        //定义一个函数
        function fun()
            {
                global $a;         //尝试使用外部的全局变量a
                echo $a;                 //输出变量a的值10
                echo $b;                 //输出变量b的值,结果没有(因为没有使用global)
                $a=100;
        }
        fun(); //调用函数fun
        echo $a; //100
?>



2). 局部变量:    在函数中定义变量

作用域 : 只能在函数内部使用. 可以使用return 将值返回,  函数结束时, 会被自动销毁

  <?php
        //变量的作用域:局部变量

        //定义一个函数
        function fun()
        {
                $a=100;        //函数内定义变量
                echo $a; //将变量a的值返回
        }
        fun(); //调用函数fun

        echo $a; //没有输出,在函数内定义的变量,在函数外是无法使用的
?>



3). 静态变量:    在函数中使用 static 定义变量

  作用域 : 只能在函数内部使用.  函数结束时, 不被销毁.  函数下一次执行时还可以使用

<?php
    function fun()
    {
        //在当前脚本中连续多次调用本函数,$i依然有效,里面的静态声明(初始化)只会调用一次。
        static $i=1;
        $i++;
        echo $i."<br/>";
    }
    fun();  //2
    fun();  //3
    fun();  //4       
?>



三,函数的参数



1). 按值传递参数(普通传值)

<?php
    //假设函数的功能是求任意两个数的和.   如果求 4 与 7 的和. 这两个数就叫参数.
    function xxoo($a, $b)   // 小括号中称为  参数列表
    {
       echo '两个数的和是: '.($a+$b);
    }
    xxoo(4, 7);   
    /*
        4,  7   是实际参数
        $a, $b  是形式参数
            函数调用时, 会把实参赋值给形参  $a = 4      $b = 7
    */
?>



2). 默认参数值
可以在定义函数时,将部分参数提前附上初始值,当被调用时没有给这参数传值,就会采用默认值,以保障函数正常使用.  要求任何默认参数必须放在任何非默认参数的右侧。

<?php
    // 设置默认值
    function xxoo($a = 3, $b = 8)      
    {
           echo '两个数的和是: '.($a+$b);
    }
    xxoo( );             // 调用函数时, 没有实际参数, $a就是3, $b就是8
    xxoo(2, 4);          // 调用函数时, $a=2  $b=4
    xxoo(7);        // 调用函数时, $a=7  $b为默认值8
?>



3). 引用传递参数(引用传值)
使用&符来实现引用传递,就是将 实参 和 形参 建立引用关系
函数内容发生改变,会使当前参数也发生改变。

注意: 调用引用参数(实参)时,必须使用变量,不可以直接用值,  否则不能建立引用关系

<?php
    function xxoo( &$a )
    {
        $a++;
    }
    $x = 5;
    xxoo( $x );  // 相当于  $a = &$x;   函数操作$a, 就是操作了$x
    echo $x;     // 6
?>


4). 可变长度参数列表
func_get_args()                //以数组的方式返回所有的参数信息
func_get_arg($index)         //获取指定参数位置(index:从0开始的整数)的信息
func_num_args()                //获取参数的个数

<?php
//可变长度参数列表
function dosum()
{
    echo "获取实参的个数:".func_num_args()."<br/>";
    echo "通过索引获取某个参数的值:".func_get_arg(4)."<br/>";
    //以数组的方式返回所有的参数信息
    var_dump(func_get_args());
}
dosum(10,20,50,60,300,100,20);



5). 可变数量的参数列表

// 第一种情况
//使用 ... 来访问变量参数,  包含 ... 的参数,会转换为指定参数变量的一个数组
function sum(...$nums) {
    var_dump($nums);
}
sum(1, 2, 3, 4);

// 第二种情况
// 使用 ... 来传递参数   也可以使用 ... 语法来传递 array 做为参数到函数中
function add($a, $b) {
    echo $a + $b;
}
add(...[1, 2])."\n";

$c = [1, 2];
add(...$c);




四,函数的返回值


1)  return 后面可以是任何类型的值

2)  不写return,  或者只写return,  函数的返回值为  null

3)  return 下面的语句不会被执行.   因为return 的意思是函数结束, 并且返回到调用这个函数的位置


function _return() {
    retrun;
}
var_dump(_return());


五,可变函数



函数名 是个变量,  调用函数使用的不是直接的函数名,而是一个变量


<?php
  
    function xxoo()
    {
              echo 'aaaaa';
    }

    $x = 'xxoo';
    $x();         // 相当于调用了 xxoo()

?>


六,匿名函数


也叫闭包函数 允许指定一个没有名称的函数。通常把函数定义代码赋值给一个变量,通过变量来调用

<?php
         
    $x = function(){  
            echo 'aaaaa';  
    };
    $x();         

    //利用匿名函数获取全局变量值
    $a = 100;
    $z = function() use ($a){
              echo $a;   // 100  
    };
    $z();
?>


七,回调函数


指调用函数的时候将另一个函数作为参数传递到调用的函数中,而不是传递一个普通的变量作为参数
使用回调函数是为了可以将一段自己定义的功能传到函数内部使用

<?php
  
    function xxoo($var)
    {
              $var *= 2;
            return $var;
    }

    function base($x)
    {
        for($i = 1; $i <= 5; $i++):
                echo $x($i);
        endfor;
    }

    base('xxoo');    // $x='xxoo';  $x() => xxoo()
?>

八,递归函数

函数内部可以调用其它函数.  递归函数可以看成 函数在内部调用自己.
函数自己调用自己, 会造成死循环. 必须满足某些条件后, 使它不会调用自己.
一般, 当参数满足某个条件时,就不调用自己

<?php
    /* 该函数只作说明, 没有实际意义 */
    function xxoo( $n )
    {
             echo $n;
               if ($n > 1) {          // 当参数大于1时, 调用自己
                             xxoo( $n-1 );
               }
             echo $n;
    }
    xxoo( 5 )
?>



九,引入文件  (文件包含)


把自定义的函数放入一个文件中. 然后把文件加载进来. 就可以使用那些函数了.

include     对于include,如果载入成功,有返回值,返回值为1;如果载入失败,则返回false.
include_once           加载文件, 多次书写只会加载一次, 从而避免了重复加载而报错

<?php
        include '文件名';
        include_once('文件名');   
?>

require    对于require,如果载入成功,有返回值,返回值为1;如果载入失败,无返回值。
require_once           加载文件, 多次书写只会加载一次, 如果报错, 就不会往后执行

<?php
        require '文件名';   
        require_once('文件名');
?>
  
注意:
include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低
所以后面能不加括号就不加括号




include 和 require的区别

<?php
        include '不存在的文件名';
        require '不存在的文件名';  

        echo 'hello world';
?>

        require 和 include 几乎完全一样,除了处理失败的方式不同之外。
               
        include在加载文件失败时,会生成一个警告错误(E_WARNING),在错误发生后脚本继续执行。
        所以include用在希望继续执行并向用户输出结果时。
               
        require在加载失败时会生成一个致命错误(Fatal Error),在错误发生后脚本停止执行。
        一般用在后续代码依赖于载入的文件的时候。
       



十,如何认识系统函数


1) 功能  要了解本函数的实现功能
2) 参数   调用函数需要哪些参数(可选和必选)以及类型   注意   参数是否为引用方式 &
3) 返回值   本函数都有什么返回结果

示例

bool settype ( mixed &$var , string $type )

伪类型:

mixed,说明一个参数可以接受多种不同的类型。

number,说明一个参数可以是整型或浮点型。

callback,说明参数是一个回调函数。  array_reduce()

void,如果作为返回类型,意味着函数的返回值是没有用的。作为参数列表中的内容意味着不接受任何参数     exit()


十一,字符串函数

strlen( )         获取字符串的字节数
mb_strlen( ) 获取字符串的字符数
str_replace( ) 替换字符串
str_ireplace( )  替换字符串中的一些字符(不区分大小写)
trim( )  函数移除字符串两侧的空白字符或其他预定义字符
htmlspecialchars( ) 把一些预定义的字符转换为 HTML 实体
htmlspecialchars_decode( ) 将特殊的 HTML 实体转换回普通字符
addslashes( )  在预定义字符之前添加反斜杠的字符串
stripslashes()  删除由 addslashes() 函数添加的反斜杠
md5( ) 计算字符串的 MD5 散列
strstr( ) 查找字符串的首次出现
strrchr( )  查找指定字符在字符串中的最后一次出现
strrpos( )  计算指定字符串在目标字符串中最后一次出现的位置
strrev( ) 反转字符串
substr( ) 返回字符串的一部分
str_repeat( ) 把字符串重复指定的次数


十二,文件系统函数

file_get_contents( ) 将整个文件读入一个字符串

file_put_contents( ) 将一个字符串写入文件

注意: 在Windows下无法以设备名来命名文件或文件夹,这些设备名主要有aux、com1、com2、prn、con、nul、ltp1、ltp2等,它们均为保留名称。


十三,密码散列算法函数


password_hash( ) 创建密码的散列

password_verify( ) 验证密码是否和散列值匹配

十四,数学函数

abs( )        绝对值
ceil( )        进一法取整
floor( )        舍去法取整
pow( )         返回数的n次方
round( )        浮点数四舍五入
sqrt( )        求平方根
max( )         求最大值
min( )        求最小值
rand( )         随机数
mt_rand( )    更好的随机数
pi( )        获取圆周率值
intval( )        获取变量的整数值


十五,杂项函数


exit( )  输出一个消息并且退出当前脚本

die( )  等同于 exit()

sleep( )  延缓执行

eval( )  把字符串作为PHP代码执行

十六,函数处理  函数

create_function()         创建一个匿名函数

call_user_func()                   把第一个参数作为回调函数调用




必火网络安全培训,北京实地培训,月月有开班,零基础入门,四个月打造渗透高手。
详情请加微信:nvhack/153-2000-4362,手机微信同号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|女黑客安全网 |网站地图 | 津ICP备17008032号-3

GMT+8, 2026-2-2 05:20 , Processed in 0.064313 second(s), 24 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表