跟随我在oracle学习php(30)
变量的作用域
通常说作用域,有2个:
局部作用域:只能在所定义的函数范围内使用。
全局作用域:在函数的“外部”范围使用。
——php中,局部和全局作用域是不重叠的
——js中,全局作用域是包括局部作用域的
但还有两个:
超全局:就是在函数的内部和外部都可以使用。
超全局变量只有系统内部预定义的那几个,我们不能再程序中创建超全局变量。
静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。
局部访问全局变量的特定语法
1,在局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:
语法:global $变量名;
举例:
说明:
1,实际上,函数中的global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区
示例:
2,在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量:
$GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。
但通过 $GLOBALS操作全局变量,是直接操作(而不是引用操作),即如果unset该对应元素,则全局变量对应变量也被unset:
3,实际上,我们还可以在函数内部直接使用$GLOBALS数组,添加元素的方式来创建全局变量,自然也就类似局部使用全局:
全局访问局部变量的特定语句
通过引用传递的方式向形参传递一个引用实参变量
$v1 = 10;
function f1( &$p1, $p2){ ...... } //$p1是函数的形参,也即就是函数的内部(局部)变量
$v2 = f1( $v1, 10); //此时我们认为$v1就可以使用函数中$p1的值。
使用函数的引用返回形式:见前面引用传递的方式返回数据
函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了
结果:
有关函数的系统函数:
function_exists():判断某个函数是否被定义过,返回布尔值
if( function_exists(“ func1 “) == false ){
function func1(){。。。。。。};//定义函数
}
func_get_arg(n):获得一个函数的第n个实参值(n从0开始)
func_get_args():获得一个函数的所有实参,结果是一个数组
func_num_args():获得一个函数的所有实参的个数。
有关函数的编程思想
递归思想(递归函数)
递归思想的一个基本形式是:在一个函数中,有至少一条语句,又会去调用该函数自身。
但是,从代码角度来说,如果单纯是函数内部调用函数本,则会出现“出不来”的现象。
则我们就必须再来解决下一个问题:
怎么终止(停止)这种调用——找到递归函数的出口。
案例分析:
写一个递归函数,该函数可以计算一个正整数的阶乘:
数学基础:
A: 1的阶乘是1
B: 大于1的数的阶乘,是这个数减1的数的阶乘,乘以该数的结果。
比如:要求6的阶乘:
则定义一个函数jiecheng(){.....};该函数可以计算n的阶乘
递归思想的总结:
为了解决一个“大”问题,根据现实逻辑,该问题可以通过比它小一级的同类问题的答案而“轻松得到”。小一级的问题又可以通过更小一级的问题而轻松得到,依次类推——直到“最小问题”,通常就是一个已知数(答案)。
递归思想的图示