Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380858
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1741
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-21 22:46
文章分类
文章存档

2014年(22)

2013年(45)

分类: PHP

2013-09-02 09:42:56

函数嵌套

PHP中函数中可以嵌套定义一个函数,这和C#等语言不一样。嵌套定义的函数,必须要等到外围函数运行后,才有效。也就是说,外围函数的运行,使得系统中重新定义了一个新的函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
function a()
{
    function b()
    {
       echo "function b
";
    }
    echo "function a
";
}
//b();//无法运行,未定义
a();
b();
?>

一开始如果运行b()。会报错,因为系统找不到b函数,但是运行a函数后,a中的定义b函数的语句也运行了,因此系统中有了b函数。因此接下来运行b函数也就可以了。

运行结果为:

function a  
function b

global变量

这个关键字的使用,php开发中都应当很熟悉。在函数中使用全局变量前,都需要加上global标示。事实上,可以理解为global标示的变量是函数外部全局变量的一个别名。使用global关键字等价于在 $GLOBALS变量中创建一个对变量的引用。

1
2
3
4
5
6
7
8
9
10
11
$var=100;
function a()
{
   global $var;
   $var=$var+1;
   echo $var."
";
}
a();
echo $var."
";
?>

等价于下面的写法

1
2
3
4
5
6
7
8
9
10
$var=100;
function a()
{
   $GLOBALS["var"]=$GLOBALS["var"]+1;
   echo $GLOBALS["var"]."
";
}
a();
echo $var."
";
?>

最终都是输出 101 101

静态变量

和C#语言不同,PHP的函数中允许有静态变量,其使用方式和类中的静态变量类似。

默认参数和可变参数

和C#相同,PHP的函数也支持默认参数和可变参数。概念和C#差不多。

1
2
3
4
5
6
function a($a,$b=100)
{
echo ($a+$b)."
";
}
a(100,10);
a(100);

PHP 的函数有时候需要一个不定长度的参数,此时只需要将函数的参数置空即可。在PHP中,调用函数的时候,输入的参数比定义的参数还多,是不会报错的,PHP 只会根据顺序取它需要的参数即可。如果PHP输入的参数比预设的少,则会报错。PHP中可以通过下面三个内置的方法,获得参数的信息。

1
2
3
$array = func_get_args();
$count = func_num_args();
$value = func_get_arg(argument_number);

看个例子就能明白了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function addall()
{
    $array = func_get_args();
    echo "参数数组:" ; print_r($array);echo "
";
    $count = func_num_args();
    echo "参数个数:" ;print ($count);echo "
";
    $sum=0;
    for($i=0;$i<$count;$i++)
    {
        $value = func_get_arg($i);
        echo "第 $i 个参数的值是 $value
";
     $sum+=$value;
    }
    echo "总和$sum";echo "
";
}
addall(100,10,20,13);
?>

类型暗示

默认的,PHP函数中,不需要知道变量的类型。但是在某些场合,我们需要某些函数只接受特定的类型。那么需要对该这个函数的参数采取类型暗示。

语法方式和C#定义函数那样,在参数前面指定参数类型即可。看下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
class A{}
class B extends A{}
class C{}
function test (A $a, B $b)
{
}
test(new a,new b); // 可以运行
test(new b,new b); // 可以运行
test(new a,new a); // 报错
test(new a, new c); // 报错
?>

如果函数test的定义为function test ($a, $b){},那么下面的4个调用方法都是可以运行的。

但是一旦指定了参数类型,则最后2个调用会失败,因为不符合参数类型。

可变函数

类似可变变量那样,函数名也可以通过变量表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function fa ()
{
    echo "fa running...
";
}
function fb ()
{
    echo "fb running...
";
}
$f="fa";
$f();//等价于调用fa()
$f="fb";
$f();//等价于调用fb()
?>

匿名函数

和C#中的匿名函数概念一样,PHP中也有匿名函数的概念,PHP支持通过内置函数来创建函数的功能。根据php手册上的例子,

1
2
3
4
5
6
7
8
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); 
echo "New anonymous function: $newfunc\n"; 
echo $newfunc(2, M_E) . "\n"; 
// outputs 
// New anonymous function: lambda_1 
// ln(2) + ln(2.718281828459) = 1.6931471805599 
?>

$newfunc就类似于c#中的委托类型可以通过它调用创建的函数。

阅读(1273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~