WEB安全之PHP基础(三):PHP函数、PHP变量作用域
1.PHP 函数
-
PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。
-
PHP 用户定义函数
除了内建的 PHP 函数,我们可以创建我们自己的函数。 -
函数是可以在程序中重复使用的语句块。
页面加载时函数不会立即执行。
函数只有在被调用时才会执行。 -
在 PHP 创建用户定义函数
用户定义的函数声明以单词 “function” 开头:
语法
function functionName() {
被执行的代码;
}
-
无参数的函数,先不输入参数,调用了才会被执行
-
return返回值
-
注释:函数名能够以字母或下划线开头(而非数字)。
注释:函数名对大小写不敏感。
提示:函数名应该能够反映函数所执行的任务。 -
在下面的例子中,我们创建名为 “writeMsg()” 的函数。打开的花括号({)指示函数代码的开始,而关闭的花括号(})指示函数的结束。此函数输出 “Hello world!”。如需调用该函数,只要使用函数名即可:
实例
<?php
function sayHi() {
echo "Hello world!";
}
sayhi(); // 调用函数
?>
- 形参
- 默认传入值
- 形参有默认值
PHP 函数参数
- 可以通过参数向函数传递信息。参数类似变量。
参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。 - 下面的例子中的函数有一个参数($fname)。当调用 familyName() 函数时,我们同时要传递一个名字(例如 Bill),这样会输出不同的名字,但是姓氏相同:
<?php
function familyName($fname) {
echo "$fname Zhang.<br>";
}
familyName("Li");
familyName("Hong");
familyName("Tao");
familyName("Xiao Mei");
familyName("Jian");
?>
PHP 默认参数值
- 下面的例子展示了如何使用默认参数。如果我们调用没有参数的 setHeight() 函数,它的参数会取默认值:
实例
<?php
function setHeight($minheight=50) {
echo "The height is : $minheight <br>";
}
setHeight(350);
setHeight(); // 将使用默认值 50
setHeight(135);
setHeight(80);
?>
PHP 函数 - 返回值
- 如需使函数返回值,请使用 return 语句:
实例
<?php
function sum($x,$y) {
$z=$x+$y;
return $z;
}
echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>
匿名函数
- 匿名函数就是没有名字的函数。
将一个匿名函数"赋值"给一个变量——此时该变量就代表该匿名函数了!
$callfunction=function($name){
return $name;
};
echo $callfunction('moonsec');
- 没有参数的匿名函数
- 匿名函数赋值给一个变量
- 没有参数的匿名函数
回调函数
- 回调函数是指调用函数的时候将另一个函数作为参数传递到调用的函数中,而不是传递一个普通的变量作为参数
使用回调函数是为了可以将一段自己定义的功能传到函数内部使用
<?php
function Speak($a,$b){
echo "He can speak ".$a;
echo "<br>";
echo "She can speak ".$b;
}
function Speak_Test(){
return call_user_func_array('Speak',array('Chinese','English'));
}
Speak_Test()
?>
- call_user_func(函数名,有形参的话输入字符串)
2.PHP 变量作用域
- 在 PHP 中,可以在脚本的任意位置对变量进行声明。
变量的作用域指的是变量能够被引用/使用的那部分脚本。 - PHP 有三种不同的变量作用域:
local(局部)
global(全局)
static(静态) - Local 和 Global 作用域
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
下面的例子测试了带有局部和全局作用域的变量:
<?php
$x=5; // 全局作用域
function myTest() {
$y=10; // 局部作用域
echo "<p>测试函数内部的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
}
myTest();
echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
?>
- 在函数内部访问不了全局变量
- 在函数外部也访问不了局部变量
在上例中,有两个变量 $x 和 $y,以及一个函数 myTest()。$x 是全局变量,因为它是在函数之外声明的,而 $y 是局部变量,因为它是在函数内声明的。
- 如果我们在 myTest() 函数内部输出两个变量的值,$y 会输出在本地声明的值,但是无法 $x 的值,因为它在函数之外创建。
然后,如果在 myTest() 函数之外输出两个变量的值,那么会输出 $x 的值,但是不会输出 $y 的值,因为它是局部变量,并且在 myTest() 内部创建。 - 注释:您可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被在其中创建它的函数识别。
PHP global 关键词
- global 关键词用于在函数内访问全局变量。
要做到这一点,请在(函数内部)变量前面使用 global 关键词:
- 实例
<?php
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
- PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。
- 通过关键字访问
- 上面的例子可以这样重写:
<?php
$x=5;
$y=10;
function myTest() {
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y; // 输出 15
?>
PHP static 关键词
- 通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。
要完成这一点,请在您首次声明变量时使用 static 关键词: - 实例
<?php
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
- 然后,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。///
注释:该变量仍然是函数的局部变量。