A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

变量的作用域问题
变量的作用域,就是指:一个变量,在什么范围内可以使用的情况。
PHP中,有三个变量作用域:
局部作用域:
就是指一个函数的内部范围。
对应这样的变量,就称为局部变量
超全局作用域:
就是指所有代码的范围。
对应这里的变量,就称为超局部变量;
其实只有系统预定义的几个:$_GET,$_POST,$_REQUEST,$_GLOBALS,$_SESSION,
$_COOKIE,$_FILES
全局作用域:
就是不在函数内部的范围——函数外部。
对应这样的变量,就称为全局变量。

通常:
     全局范围不能访问局部变量;
这里演示局部访问全局变量,会出错
   $v1 = 1;
function  f1(){
        echo  “<br /> 在函数内部访问外部:v1=$v1”;
}
     局部范围不能访问全局变量;
f1();
这里演示全局变量访问局部变量,会出错
function f2(){
$v2 =1 ;
}
f2();
echo  “<br  />在函数外部访问局部变量 : v2=$v2”;

  函数内部的变量(局部变量),通常在函数调用执行结束后,就被”销毁”;
  但有一种局部变量,在函数调用结束后不被销毁,它叫“静态变量”
使用形式:
        function  函数名(......){
        static   $变量名 = 初始值;  // 这就是静态变量
}
示例:


如何在局部作用域使用(访问)全局变量(常见需求)
有两种做法:
        做法一:
使用global关键字来实现

做法二:
使用$GLOBALS 超全局变量来实现:

但,如果我们对$GLOBALS变量的某个单元(也即下标)进行unset,则其就会完全对应销毁改变量。
这是因为:$GLOBALS对全局变量的使用可以看作是全局变量的另一种语法形式而已,而不是“引用关系”,举例如下:


有关函数的系统函数

function——exits();判断一个函数是否被定义过,其中使用的参数为”函数名”;
func_get_arg();
func_get_args();
func_num_args();



有关函数的编程思想
递归函数就是在一个函数内部调用他自己的函数。
递归思想——递归函数
function  f1($n){
echo  $n;
$n++;
f1($n);
}
f1(1);
从这个简单的函数可以看出,该函数调用是无限的,非正常做法!
实用的递归函数是:能够控制这个调用的过程中,会在某个时刻停下来
求n的阶乘
function  f1($n){
if($n  ==  1){
return  1;}   //跳出条件
Sv1  =  $n*f($n-1);
Echo  “ <br  />$v1”;
return $v1;
}
地柜思想总结:
当面对一个大问题是,改大问题可以经由该问题的同类问题的小一级问题,而进过简单计算获得,而且,可以获知(已知)这类问题的“最小一级问题”的答案。则,此时就可以用递归方法解决该问题。
Function   函数名($n){
If(是最小一级){
return  值 ;

$一个变量 = 对 函数名($n-1)进行运算;
Return  $一个变量;



递推(迭代)思想

如果要求一个大问题,且该问题有如下连个特点:
1.一直待问题的同类问题的最小问题答案。
2.如果知道这种问题的小一级问题的答案,就可以轻松求得其大一级问题的答案,并且此问题的级次有一定的规律:
   则此时就可以使用递推思想来解决问题,代码模式为:
$变量一 =已知最小一级的答案;
For($i=最小一级的下一级;$i <=最大一级的级次;++$i){
$变量二 = 对$变量一进行一定的计算,通常需要使用到$i;
$变量一=$变量二;
}
Echo  “结果为:” . $变量二;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马