首页课程PHP Fun Breakthrough ClassVariable scope of custom function

Variable scope of custom function

目录列表

变量作用域

我们通过前面的章节函数定义部份的学习我们知道了几个不同的规矩:

  • 函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系。仅仅是在函数内部执行

  • 函数内声明的变量也与函数外的变量没关系。

但是,我们实际的处理情况中会遇到这样的一个情况:

  • 我想在函数体内定义的变量在函数体外用

  • 我想把函数体外的变量拿到函数体内来使用

1.通过$GLOBLAS来读取外部变量:

<?php

$one = 10;
function demo(){
   $two = 100;
   $result = $two + $GLOBALS['one'];
   return $result;
}
//你会发现结果变成了110
echo demo();

?>


上例中:我们将函数体外的变量通过$GLOBALS拿到了函数体使用。所以,打破了函数外的变量不能在函数体内使用的限定。

2.通过$GLOBLAS,在函数内修改外部变量:

<?php

$hongniu = '我是一个兵,来自老百姓';
function test(){
   echo '执行了函数test哟<br />';
   //调用test()函数,将通过$GLOBALS['hongniu'],把$hongniu的值改变掉

   $GLOBALS['hongniu'] = '帮助别人很快乐';
}
test();
//发现是不是输出的值变了呀?
echo $hongniu;

?>

上例中:我们发现通过$GLOBALS['hongniu'],把$hongniu的值改变掉,所以在最后输出$hongniu的时候,值发生了变化。

3.通过$GLOBLAS,在函数内创建全局变量:

<?php

function hello(){
   $GLOBALS['que'] = '提神喝茶更好哟';
   echo '你调了一下函数hello<br />';
}
hello();
echo $que;

?>


上例中:我们发现$que是不存在的,可以调用函数hello()后,在函数外部可以执行echo $que了,能够看到结果:提神喝茶更好。我们明白了,函数内声明的变量,通过$GLOBALS声明一个变量,也能够显示出来。

在函数内使用global关键词后面跟一个或多个变量,就把变量变为了全局变量,格式如下:

在global后面可以跟一个或者多个变量,变量用逗号分开。

实际上global是起传递参数的作用,而并非使变量的作用域为全局。

实例:

<?php
$a = 10;
$b = 100;
function test(){
   global $a , $b;
   echo $a + $b;
}
//结果是不是显示出来了?
test();
?>

上例中:你还可以试试在global关键词后面跟着未创建的变量,在函数体内定义变量值,修改变量的值试试。其实与$GLOBALS一样,只是用法不同而已。

注意:不可在global 后写 $变量 = 值。

填写空格,让函数外部的变量改变原值。

<?php 

$foo = 100; 

function demo($n){  

$n = 10; 

}

echo demo($foo).'<br />';  

$foo; 

?>

1/2