php--关于函数(2)变量范围

PHP的变量的范围
局部变量( local variable): 在函数中声明的变量就是局部变量,只能在自己的函数内部使用。参数就是局部变量,这个局部变量可以调用时去赋值。

全局变量(global variable): 在函数外声明,在变量声明以后的,直到整个脚本结束前都可以使用,包括在函数中和{}中都可使用,在PHP中使用全局变量 要通过global关键字              将这个全局变量包括到函数中才能使用到,在global声明之后才是使用全局的变量

静态变量(static variable):静态变量只能声明在函数中(类中),不能在全局声明,使用static在变量前  

      作用:一个变量可以在同一个函数在多次调用中同用。
    1. 静态变量在静态代码段中保存
    2. 一个函数多次调用之间共用,但只在第一次调用 函数时声明到内存,以后再调用用,就不再声明,而直接使用

局部与全局变量:示例如下

<?php
$a=10;    //定义一个全局变量
function demo1(){
$a=5;     //定义一个局部变量
echo "demo1()=".$a."<br>";
}
function demo2(){
global $a;  //引用一个全局变量
$a+=10;
echo "demo2()=".$a."<br>";
}
demo1();
demo2();
echo "\$a=".$a;  //注意此处要用\进行转义,要不输出的是解析后的$a的值
?>

输出结果:

demo1()=5
demo2()=20
$a=20

*****由此可以看出:1、局总变量只在函数内部使用,2、被函数引用的全局变量如果在函数中值被改变,那么全局变量的值对应的也会改变

静态变量:示例如下

function sta(){    //声明一个具有静态变量的函数
static $a=0;
$a++;
return $a." ";    //此处用return把$a的值返回,注意调用时语句
}
function ordi(){    //声明一个普通函数
$a=0;
$a++;
echo $a." ";
}
for($i=0;$i<10;$i++){//调用函数,结果:1 2 3 4 5 6 7 8 9 10
echo sta();
}
echo "<br>";
for($i=0;$i<10;$i++){//调用函数,结果:1 1 1 1 1 1 1 1 1 1 
ordi();
}

echo "<br>";
echo sta();      //再次调用带静态变量函数,结果11,
echo "<pre>****************************</pre>";
$str=sta();  //函数str()返回的是一个值,所以可以将函数赋值给一个变量,因此处又执行了一次函数调用,执行后结果是12,而不是11,此处的值12值得玩味
echo $str;

输出结果如下:

1 2 3 4 5 6 7 8 9 10 
1 1 1 1 1 1 1 1 1 1 
11

****************************

12

*****因为静态变量只能在声明在函数中,我们如果要使用静态变量的值也只能是通过调用函数得到,若调用函数时再赋值给一个变量,有可能得不到我们想要结果,如上例

时间: 2024-12-26 06:59:47

php--关于函数(2)变量范围的相关文章

php学习笔记6--php中的文件包含 include,require,include_once,require_once

php中的文件包含 include,require,include_once,require_once 文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等.php中文件包含指令有4个,分别为:include,include_once,require,require_once其中:include和require:使用一次便包含一次文件;而include_once和require_once则是:不管在一个脚本中包含另外一个脚本多少次,都只加载一次,不会重复,这样可以避免因一个文件的

《PHP Manual》阅读笔记2

本次笔记截止到 语言参考 流程控制. 1.没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的.但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=.下表按照优先级从高到低列出了运算符.同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序. 运算符优先级 结合方向 运算符 附加信息 无 clone new clone 和 new 左 [ array() 右 ** 算术运算符 右 ++ -- ~ (in

PHP中文手册1

1.入门 关于换行 PHP 会在输出时自动删除其结束符 ?>后的一个换行.该功能主要是针对在一个页面中嵌入多段 PHP 代码或者包含了无实质性输出的 PHP 文件而设计,与此同时也造成了一些疑惑.如果需要在 PHP 结束符 ?> 之后输出换行的话,可以在其后加一个空格,或者在最后的一个 echo/print 语句中加入一个换行. <?php phpinfo(); ?> 调用函数 phpinfo(),将会看到很多有关自己系统的有用信息,例如预定义变量.已经加载的 PHP 模块和配置信

用 php 实现一个视图组件和模板引擎——基础

只要不是做后端接口开发和一些作为守护进程之类的服务器脚本,大多数时候都是在和浏览器打交道,因此合理组织并展现 html 标签是最为常见的工作.一般大家使用框架时,都会自带有一套视图组件和模板引擎. 我们不讨论这些组件和引擎的好坏.因为这些东西已经经过考验,可以在生产环境下使用.我们现在只是为了学习一些东西,这时候了解一些原理上的可能对以后的帮助更大,如果一些人真的很有时间,利用这些基础知识完全可以写一个自己的组件,即可当做练习,也可以拿去自用. 好了,说这么多,我还是希望很多人明白,视图和模板引

回顾Python装饰器

函数装饰器(function decorator)可以对函数进行“标注”,给函数提供更多的特性. 在理解装饰器之前需要理解闭包(closure).Python3.0 引入了保留关键字 nonlocal,使用闭包同样也离不开 nonlocal.顺便说一句,闭包除了用在装饰器上,对于异步编程也是很重要的概念. 装饰器(decorator)是一个可调用的装饰函数,它接收另一个函数作为参数. 假设已经定义好了一个装饰器 decorate(decorate 实际上是一个接收函数并且返回函数的函数),那么以

PHP基础-自定义函数-变量范围-函数参数传递

一.自定义函数    function 函数名([形式参数1,形式参数2,....形式参数n]){        //各种PHP代码....        //......        return 表达式;//也可以不返回,如果不写那么默认返回null    }        函数的调用:        函数的调用需要遵循定义函数的时候写的规则,一一对应,将具体的实际参数传给定义函数时候写的形式参数!        调用函数之后执行的过程是相对独立的,互补干扰,默认没有联系!        

初识PHP(二)常用函数

在此记录一些常用库函数和常用语法以便查阅 一.PHP手册 php手册中文地址 http://php.net/manual/zh 二.一些常用操作 2.1字符串操作 2.1.1 strpos — 查找字符串首次出现的位置 mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) 返回 needle 在 haystack 中首次出现的数字位置. haystack 在该字符串中进行查找. needle 如果 needl

通过Include和Require函数实现代码重用

通过Include和Require函数实现代码重用     如果你做过各种大小的Web站点,一定会对重用代码段的重要性深有体会,不管是HTML还是PHP代码块.比如需要一年修改一次包含版权信息的页脚,而你有1000个Web页(就算是10个),手动操作则会让你痛苦不已. 通过PHP,你可以使用不同函数帮助你重用代码.具体用到的函数取决于你打算重用的内容. 主函数如下: include() and include_once() require() and require_once() include

MATLAB 嵌套函数,子函数,私有函数,重载函数

MATLAB 函数嵌套 MATLAB中M文件有两种类型,脚本M文件和函数M文件.脚本M文件是将可执行程序语句放入M文件中,就像在命令窗口那样,按其语句顺序及逻辑关系执行,可以理解为一般的顺序执行程序语句.函数文件一般是声明一个函数,方便以后操作中的调用.下面就函数文件中函数嵌套的使用做简单分析. 对于函数文件,一个M文件只能定义一个总函数,即第一句function所定义的函数,而且整个M文件在外部使用时候表现出来的也只有这一个函数.如果需要多个函数嵌套,与其定义顺序无关.下面结合一个简单的例子来