PHP学习记录(函数)

函数

函数含义php

  • 函数:是实现特定功能的、能够重复执行的代码段;
  • 函数名:从语法上讲,函数名中能有汉字,但在实际开发中不建议使用!

函数结构java

function 函数名 () {
    //代码块
}

函数名定义规则数组

  • 开头:[a-zA-Z_\x7f-\xff]
  • 函数名:[a-zA-Z0-9_\x7f-\xff]
  • 函数的首字母不能为数字、能够是汉子或者字母,函数中间可使用数字

函数的返回值函数

  • 和其余语言不一样的是,PHP并无在函数声明的时候显示函数是否有返回值,若是函数内部使用了return即表示有返回值,反之则表示没有返回值,返回类型能够为对象、数组、字符串等。

函数变量code

//局部变量
//局部动态变量:变量只在函数内部执行,执行完毕则被销毁;
//局部静态变量:使用static修饰,执行完毕不被销毁;
//注:函数内部定义的变量,为局部变量,函数外部不能访问。
function func()
{
    $a = 3;  //局部动态变量
    static $b = 34;  //局部静态变量
}

//全局变量
//在函数外部定义的变量,称为全局变量。在函数内部使用全局变量的时候,不能和其余语言同样直接使用,有两种使用方法:
//(1)用global关键字进行声明后使用
$a = 3;
function func()
{
    global $a;
    echo $a;
}

//(2)使用超全局变量数组$GLOBALS直接访问
$a = 3;
function func()
{
    echo $GLOBALS['a'];
}

函数的参数对象

值传递和引用传递递归

//值传递:当一个变量的值赋予给另一个变量的时候,改变其中一个变量的值,将不会影响到另一个变量的值

//引用传递:新变量指向了原始变量,改动新的变量将影响到原始变量,反之亦然。(只有有名字的变量才能引用传递,好比表达式就不能够)
//注:在函数中传递参数的类型为对象时,即便不加&,也是引用传递,由于对象名对应的是该对象的引用地址。

$a = 4;
function func1($c)  //值传递
{
    $c = 7;
}
func1($a);
echo $a, "\n";  //4,函数没有改变$a的值

function func2(&$d)  //引用传递
{
    $d = 7;
}
func2($a);
echo $a, "\n";  //7,函数改变了$a的值

参数默认值作用域

//若是$a和$b没有默认值,调用该函数的时候必须传值,不然会报错,若是有默认值,能够不传参数
function func($a = 3, $b = 5)
{
    echo "a的值为{$a}, b的值为{$b}\n";
}
func();

可变参数列表开发

/*
 *在函数定义时,形参能够省略不写,在函数内部能够经过系统方法获取传递进行的参数数组。
 *func_num_args():传入函数实参的个数
 *func_get_args():传入函数实参列表(数组形式)
 *func_get_arg(index):传人函数具体位置的实参
 */

function fun6()
{
    echo func_num_args(), "\n";  //3
    print_r(func_get_args());  //数组
    echo func_get_arg(0);  //10
}
fun6(10, 11, 12);

传参类型限定字符串

//函数定义时,能够给参数限定类型,共三种类型:array,object,callback
function func(array $a)  //实参必须为数组类型
{
    print_r($a);
}
//func(1);  //会报错
func([1, 2, 3]);

复杂函数

可变函数

//将函数的名字赋值给变量,经过变量去调用函数,让函数的调用更具多样性
/*
 * is_callable(函数):判断函数可否被调用
 * function_exists(函数):判断函数是否存在
 */
function func()
{
    echo 'hello, world', "\n";
}

$fun = 'func';

if (is_callable($fun)){  //判断是否能调用
    echo '能调用', "\n";
    $fun();
}

if (function_exists($fun)){
    echo '能调用', "\n";
    $fun();
}

函数的嵌套

/*                                                 
* php全部定义的函数,做用域都是全局的                             
*                                                 
* 和其余语言好比java相比,php不存在内置函数,意思就是说bar()不是foo()的内置函数, 
* 二者没有区别,做用域都是全局的,在bar()函数内不能调用foo()中声明的变量,可是bar()
* 函数必须在foo()调用以后才会被定义,才能被调用                       
*                                                 
*/                                                
function foo()                                     
{                                                  
$a = 'hello, world';                           
function bar()                                 
{                                              
    /* 不能调用变量$a */                             
    echo 'bar()函数被调用';                         
}                                              

/* 内部能够调用bar(),由于其已经被定义 */                                                  
//bar();                                         
}                                                  
                                                   
/* 如今不能调用bar(),由于其尚未被定义 */                        
                                                   
foo();                                             
                                                   
/* 如今能够调用bar(),由于foo()调用以后,bar()已经被定义 */           
                                                   
bar();

递归调用:函数调用本身自己,递归里面须要有跳出递归的判断条件

匿名函数

/*                                  
 * 匿名函数                             
 * 函数没有指定名称,称为匿名函数                  
 * 经过将函数赋给变量,经过变量来实现调用函数                                            
 */                                 
$say = function($str) {             
    echo 'hello, world';            
};                                  
$say('aaa');
相关文章
相关标签/搜索