1.5PHP基础-自定义函数和变量作用域

变量的作用域和静态变量

 

1.全局变量 :global 关键字

$a = 1;
$b = 2;
function Sum()
{
    global $a, $b;

    $b = $a + $b;
}
Sum();
echo $b;

//Example #2 使用 $GLOBALS 替代 global
$a = 1;
$b = 2;
function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;

$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处: 


2.静态变量
变量范围的另一个重要特性是静态变量(static variable)。
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
仅初始化一次
初始化时需要赋值
可以记录函数的调用次数,从而可以在某些条件下终止递归


看看下面的例子: 

//Example #5 使用静态变量的例子


function test()
{
    static $a = 0;
    echo $a;
    $a++;
}

现在,变量 $a 仅在第一次调用 test() 函数时被初始化,之后每次调用 test() 函数都会输出 $a 的值并加一。 

静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。以下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止: 
 

//Example #6 静态变量与递归函数
function test()
{
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        test();
    }
    $count--;
}

3.函数参数以及参数的引用传递

默认情况下,函数的参数通过值传递
如果希望允许函数修改它的值,必须通过引用的传递参数
通过引用传递参数
默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。 
如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &: 

//Example #2 用引用传递函数参数


function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'

4.函数的返回值

值通过使用可选的返回语句return返回
可以返回包括数组和对象的任意类型
返回语句会终止函数执行,将控制权交回函数调用处
省略return,返回值为null,不可有多个返回值

 

5.函数的引用返回

从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
 

function &myfunc()
{
	static $b = 10;
	return $b;
}

$a = myfunc();
$a = &myfunc(); //将$a 指向函数的返回值
$a = 100;
echo myfunc();

 

6.例题:写出下列程序的值?

$var1 = 5;
$var2 = 10;

function foo(&$my_var)
{
	global $var1;
	$var1 += 2;
	$var2 = 4;
	$my_var += 3;
	return $var2;
}

$my_var = 5;
echo foo($my_var)."\n";  //4
echo $my_var."\n";  //8
echo $var1."\n";  //7
echo $var2."\n";  //10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var)."\n";  //4

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值