导航
导航
文章目录
  1. 一、函数的声明
    1. 1、语法结构
    2. 2、函数调用
  2. 二、函数中的变量
    1. 1、变量范围
    2. 2、PHP静态变量
    3. 3、变量函数
  3. 三、函数分类及声明
    1. 1、函数分类
    2. 2、声明多个参数函数
    3. 3、函数注释规范
  4. 四、Callback 回调函数
    1. PHP回调函数的实现方法
  5. 五、内部函数

PHP学习笔记6:PHP中的函数

一、函数的声明

1、语法结构

function 函数名 (参数列表)
{
    函数体; //可选
    返回值; //return可选
}
  • 参数列表用逗号隔开,勿遗漏$变量符号
  • 函数名不区分大小写,规则与变量一致
  • 函数调用才执行,可先调用后声明
  • 函数名不能重名,包括系统函数

2、函数调用

function sum($x,$y) //形参:在声明函数时声明的参数
{
    // $x = 1; //如果在函数内对参数赋值,则会覆盖实参。
    // $y = 2;
    $sum = 0;
    $sum = $x + $y;
    return $sum; //执行到return函数结束,后面不再执行
}

sum();
sum(2,2); //实参:在调用函数时传递给形参的数值
echo sum(2,2); //通过return返回数据可作为值使用

二、函数中的变量

1、变量范围

  • 局部变量:函数内部声明与使用的变量
  • 全局变量:在函数外声明,脚本任何地方均可以使用

在PHP函数中使用全局变量,要通过global关键字将这个全局变量包含到函数中才能使用

$a = 1;
$b = 2;
function demo($a = '')
{
    //global 须放在前面
    //global $a,$b global 可包含多个全局变量
    //$GLOBALS['a'] //声明全局变量 方法二
    global $a;
    $a += 5;
    echo $a;
}

demo();

2、PHP静态变量

  • 静态变量可以在同一个函数中多次调用中共用
  • 静态变量只能在函数或类中声明,不能在全局声明。
function demo($a = '')
{
    static $a = 0; //定义静态变量
    $a++;
    echo "$a <br/>";
}
demo(); //输出1
demo(); //输出2

3、变量函数

$var = 'hello'; //变量名后面右括号,就寻找与变量值同名的函数
$var(); //等价于 hello();

三、函数分类及声明

1、函数分类

//常规函数
bool copy(string source,string dest)

//带mixed,表示可以传任何类型的数据
bool chown(string filename,mixed user)

//带&参数的函数,这个参数只能是变量,变量值是动态的
//对数组进行排序,数组的索引保持和单元的关联
bool arsort ( array &$array [, int $sort_flags ] )
$fruits = array('a', 'c', 'b');
arsort($fruits);
var_dump($fruits);

//默认函数,即带[]中括号的函数,表示参数可选,若没有传值则使用默认值
//如果调用没有赋值,又没有初值则出现警告
function demo($a=1,$b=2)
{
    #code
}
demo();

//带有...参数的函数,表示可以传任意多个参数
//在数组开头插入一个或多个单元 
int array_unshift ( array &$array , mixed $var [, mixed $... ] )

2、声明多个参数函数

func_num_args(): 返回传递到函数的参数数目

function Test()
{
    echo func_num_args();
}
Test('a','b','c');  // 3

func_get_arg(): 返回参数列表中的第N个参数

function Test()
{
    echo func_get_arg('1'); 
}
Test('a','b','c'); //b

使用实例

function cls_mysql()
{
    $mysql = func_get_args();
    $conn = mysql_connect($mysql['0'], $mysql['1'], $mysql['2']);
}
cls_mysql('localhost:3306', 'root', '123456'); 

3、函数注释规范

    /**
     * 用用演示函数 //函数功能,决定是否使用
     * 
     * @static
     * @access public
     * @param string $attributeName 属性名称 //函数参数,决定怎样调用
     * @return string //函数的返回值,决定调用后怎么处理
     */
    public function demo($attributeName)
    {
        $attributeName = 'abc';
        return $attributeName
    }

四、Callback 回调函数

我们自定义一个函数A,但是我们不直接去调函数A,而是在函数B中去调用函数A,函数B通过接收函数A的名字和参数来实现对函数A的调用,函数A称为回调函数。


function A($x,$y)
{
    return $x*$y;
}
function B($a,$b,$fun)
{
    return $a+$b+$fun($a,$b);
}
echo B(2,3,"A");

PHP回调函数的实现方法

php提供了两个内置函数 call_user_func()call_user_func_array() 提供对回调函数的支持

//mixed call_user_func_array 以数组的形式接收回调函数的参数
mixed call_user_func_array ( callable $callback , array $param_arr )
call_user_func_array('f1',array('A','B')); 

//call_user_func的参数个数根据回调函数的参数来确定
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
call_user_func_array('f1','A','B'); 

实例:

//普通全局函数
function f1($arg1,$arg2)
{
    echo $arg1."<br/>".$arg2."<br/>";
}

echo "通过call_user_func_array调用函数f1:<br/>";
call_user_func_array('f1',array('A','B'));

echo "通过call_user_func调用函数f1:<br/>";
call_user_func('f1','C','D');
//类
class myClass
{
    public $name;
    function show($arg1)
    {
        echo '参数名:'.$arg1."<br/>";
        echo '对象中的成员名:'.$this->name;
        echo "<br/>";
    }
    function show1($arg1,$arg2)
    {  
        echo $arg1."<br/>".$arg2."<br/>";
    }
    public static function show2($arg1,$arg2)  
    {
        echo $arg1."<br/>".$arg2."<br/>";
    }
}

echo "调用类中非静态成员函数,该成员函数中有this调用了对象中的成员:";
$a = new myClass;
$a->name = 'F';
call_user_func_array(array($a,'show'),array('E'));

echo "调用类中非静态成员函数,该函数没有调用对象中的成员,没有this:";
call_user_func_array(array('myClass','show1'),array('G','H'));

echo "调用类中静态成员函数:";
call_user_func_array(array('myClass','show2'),array('I','J'));

五、内部函数

在函数内部再声明函数,目的是在函数内部调用,用来帮助外部函数完成一些子功能。

支持一下
扫一扫,支持一下