PHP语言是弱类型语言。也就是说php变量的类型是由值来动态决定的。
php变量名可以包括数字、字母、下划线,但数字不能打头。php变量前有一个"$"符号,表示为php的变量。
注意:变量名区分大小写。输出一个不存在变量,不报错,也无任何显示。
php变量的分类及其作用域、生命周期
局部变量——定义且使用在函数体内,作用域就是所在函数。即从声明它的那条语句开始到函数结束。
全局变量——定义在函数体外,作用域在整个php文件(包含了 include 和 require 引入的文件),但在函数体内不能读到,除非在函数内使用global关键字重新申明为global。
静态变量——用在函数内,被调用完后,内存不释放,保留最终值,static实际中多用来作统计累加。 静态变量也提供了一种处理递归函数的方法。递归函数是一种自己调用自己的函数。在其他语言中,如java,也存在static关键字,但是static在修饰字段时其意义是表示这个字段属于这个类,而不是属于类构造出来的对象;当static修饰方法,也可理解为这个方法属于这个类,可以用类名直接调用,且static还可修饰内部类。
超级全局变量 —— 超全局变量是在全部作用域中始终可用的内置变量。
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
详细参见http://www.php.net/manual/zh/language.variables.superglobals.php
超全局变量(表单变量)有三种书写风格。
(1)简短风格:在php.ini中设置register_globals设置为on,在表单传递过程中可直接用$接收,传递的值不安全,以后的php版本已经无法使用。
(2)中等风格:推荐使用在PHP 4.1以后的版本可以使用。用$_POST/GET[]数组接收,在接收页面中为超级全局。
(3)冗长风格:$HTTP_POST_VARS[],比较麻烦的一种风格,未来也会逐渐取消。
<?php
function fun($a){
$a=4; //思考这个$a是局部的还是全局的
echo "2:$a"."<br />"; //输出什么?
global $a; //通过global关键字声明后$a有什么变化?
echo "$c"."<br />"; //输出一个不存在变量,不报错,输出为空也无任何显示。
echo "3:$a"."<br />";
$a = $a * $a;
echo "4:$a"."<br />";
}
$a = 9;
echo "1:$a"."<br />"; //程序由此开始
$b = fun($a); //调用函数时,程序跳转到函数定义的位置执行
echo "5:$a";
echo "$c";
/*
输出结果:
1:9
2:4
3:9
4:81
5:81
*/
?>
<?php
function a (){
$sum = 0;
//static $sum = 0;
echo "$sum"."<br />";
$sum++;
}
for($i=0; $i<=3; $i++){
a();
}
/*
输出结果:
0
0
0
0
本例如果使用static修饰这个变量,输出结果为:
0
1
2
3
*/
?>
$a 将会在包含文件 b.inc 中生效。
<?php
$a = 1;
include "b.inc";
?>
Php代码
<?php
//局部变量测试
$s1= "out s1"; //全局变量
function say(){
$s1 = "in s1"; //局部变量
echo "say():$s1";
}
say(); //输出局部变量: in s1
echo "<br/>";
echo "function out:$s1"; ////输出全局变量:out s1
//static变量测试
function count1(){
$num = 0;
$num++;
echo $num." ";
}
function count2(){
static $num = 0;
$num++;
echo $num." ";
}
for($i=0; $i<10; $i++){
count1(); //11 1 1 1 1 1 1 1 1 1
}
echo "<br/>";
for($i=0; $i<10; $i++){
count2(); //1 2 3 4 5 6 7 8 9 10
}
echo "<br/>";
//全局变量在函数中运用,加global
$a="php";
$b = "java";
function show(){
echo $a; // 无输出
global $b;
echo $b; //定义global,输出java
}
show();
?>
输出3
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b; //3
?>
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数
<?php
function Test()
{
static $count = 0;
$count++;
echo $count; //12345678910
if ($count < 10) {
Test ();
}
//$count--;
}
Test();
?>
C语言/Java等强类型语言,函数名字严格区分大小写,而php方法不区分大小写,也不支持函数重载,所以自定义函数不能和内置函数重名,不能再一个文件自定义同名函数。
- 所有的函数都使用关键词 "function()" 来开始
- 命名函数 - 函数的名称应该提示出它的功能。函数名称以字母或下划线开头。
- 添加 "{" - 开口的花括号之后的部分是函数的代码。
- 插入函数代码
- 添加一个 "}" - 函数通过关闭花括号来结束。
函数的参数
php函数的参数,函数 存在其他参数时,默认参数从右向左放置,即程序执行,从左向右匹配参数。
<?php
function egg( $a ,$b = 4)
//function egg( $a = 4 ,$b)
{
$c = $a + $b;
return $c;
}
$c = egg(5);
echo "$c"."<br />";
/*程序执行结果为9.参数传递给$a,其中$b=4;$a=5;如果我们把参数放在左面:
会有警告Warning: Missing argument 2 for egg(),但是依然输出结果5.原因是默认参数被覆盖,$b没有被赋值。建议在函数设计参数时,将默认参数置于后面。
*/
?>
数值传值和引用传值
进行参数传递时,默认传递的是数值,而非变量地址的引用。即把变量参数的数值传入,传入函数后的变量在内存中有自己的空间。函数体内变量的改变,不会影响函数体外面的变量。
可以通过加&符号来要求传入的是地址。即变量本身传入,传入后的变量与原变量建立联系,在内存中只有一个副本,公用一个存储空间,函数体内变量的变化,会影响到原变量的本身。
<?php
function deliver($a){ //函数体$a为传值操作,不会影响函数体外的变量
//可以通过加&符号来要求传入的是地址。
//function deliver($a){
//只在函数定义时使用引用符号,调用时不需要。这种方式已经不建议使用!!!
$a += $a * 10;
echo "$a"."<br />";
}
$a = 10;
echo "$a"."<br />";
deliver($a);
echo "$a"."<br />";
/*函数执行结果为
10
110
10
使用&$a的结果为
10
110
110
*/
?>
函数的嵌套
函数的递归嵌套:函数体中包含函数。
函数的嵌套应该注意执行的顺序。在程序中没有函数时,程序顺序执行。但存在函数时,函数被调用时才会执行。
<?php
function first($QQ)
{
function second($jk)
{
$jk = $jk * $jk;
return $jk;
}
return 100*second($QQ);
}
$num = 2;
echo (first($num)."<br />");
$num = 3;
echo (second($num)."<br />");
/*执行结果:
400
9
如果我们没有执行调用外层函数first(),那么我们可以执行second()吗?
答案是:不可以。会报错Fatal error: Call to undefined function second()。
*/
?>
函数的递归
函数的递归:函数自己调用自己解决重复执行的问题。递归应该特别注意条件,防止进入死循环中
<?php
/*函数的递归*/
function C($one ,$two ,$num ){
if($num >0){
$three = $one + $two;
$one = $two;
$two = $three;
echo $three."--";
C($one, $two, $num-1);
//千万不要写成$num--,否则进入死循环,思考为什么???
}
}
$a = 1;
$b = 3;
$c = 10;
echo $a."--".$b."--";
C($a,$b,$c);
/*
运行结果:
1--3--4--7--11--18--29--47--76--123--199--322--
*/
?>
相关文章推荐
《php的超全局变量》,链接http://blog.sina.com.cn/s/blog_4c26abc501000ac5.html
《各种语言下 static 详解 》,链接http://blog.csdn.net/freshlover/article/details/8562723
4万+

被折叠的 条评论
为什么被折叠?



