加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

每天学点电脑知识趣味编程系列之变量作用域

发布时间:2022-10-12 03:00:17 所属栏目:PHP教程 来源:未知
导读:
上一期的趣味编程我们讲了变量,这一期,我们要讲变量的作用域。什么是作用域呢?简单通俗的讲,就是变量可以用在什么地方PHP超级全局变量,它的使用范围。打个比方,就像我们数学中,第一

上一期的趣味编程我们讲了变量,这一期,我们要讲变量的作用域。什么是作用域呢?简单通俗的讲,就是变量可以用在什么地方PHP超级全局变量,它的使用范围。打个比方,就像我们数学中,第一题的x、y在第二题中就不能用了,第一题的x、y的值只能用在第一题,差不多就是这个意思。那么下面我们就来看看这个作用域。

官方名词解释:变量的作用域是脚本中变量可被引用/使用的部分。

作用域分为:局部作用域(local)、全局作用域(global)、静态作用域(static)、参数作用域(parameter)

一、局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。简单通俗的讲,全局意思就是到处都可以用,局部意思就是只能在特定的某些地方可以用,下面直接上代码:

PHP超级全局变量_全局static变量_php全局过滤get

代码解释:

1、上图中的x就是全局变量,拥有全局作用域,意思说在整个文件中的函数以外的地方都可以用,图中的function myTest() 就是一个函数,function是用来声明函数用的关键字,myTest就是函数名,x在函数里面不能用,所以在函数里面使用x会报错。

2、myTest函数中,声明了一个变量y,这个变量就是局部变量,拥有局部作用域,它的作用域就是在这个函数范围内,在函数外,就不能使用了,所以最后一行代码输出这个变量y是会报错的。

下面我们看看程序运行结果:

php全局过滤get_PHP超级全局变量_全局static变量

上图中,报了4个notice错误,也就是警告错误,说是在14行中的变量x没有定义,在25行的变量y没有定义。因为14行是在函数中使用x,x的作用域是全局的,函数内不能直接调用,所以报错;25行是在行数外面使用变量 y,y在函数外面没有定义,只在函数里面定义了,这是局部变量,所以在函数外面不用使用,所以也报错了,同时我们可以看到,在行数内使用y,在函数外使用x,都成功输出了x、y的值。

通过上面的例子,你是否理解了什么局部和全局作用域了么?

有人会问,那我如果想在函数里面使用全局变量(全局变量的作用域即为全局作用域)怎么办?其实很简单,只需要使用关键字global即可,如图:

PHP超级全局变量_php全局过滤get_全局static变量

上图中,我在变量x前面加了关键字global,这样,再在函数里面输出变量x,就不会报错了,也可以正常输出变量的值5了,运行结果如下:

全局static变量_php全局过滤get_PHP超级全局变量

除了使用global关键词声明全局变量外,还可以使用超级全局变量$GLOBALS来使用全局变量 x,函数中的变量x可以用$GLOBALS['x'],也是一样的效果。

注意:如果在函数内使用关键字global或者$GLOBALS,可以通过重新给全局变量赋值来改变全局变量原有的值,单纯的使用,不会改变值,如图:

全局static变量_php全局过滤get_PHP超级全局变量

上图中,我们在函数中给全局变量x重新赋值100,我们看一下输出的结果是怎样的:

PHP超级全局变量_全局static变量_php全局过滤get

从运行结果中可以看出,在函数内,我们给全局变量x赋值成功了,在函数外面输出x的值也编程100了。

最后,有人会问,函数内部的局部变量如何在函数外使用?这个问题,我可以告诉你,无解,局部变量之所叫局部变量,他的作用域就是局部的。

二、静态作用域(static)

当一个函数完成时,它的所有变量通常都会被删除,自动释放内存。然而,有时候你希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字,如图:

php全局过滤get_PHP超级全局变量_全局static变量

代码解释:

1、上图中变量x使用了关键字static,在一次函数运行完结时,不会自动删除,会保留上一次调用之后的值,在第一次调用之后,我们对变量x进行了自增1,那么第一次程序运行之后,x会变成1,第二次会变成2,第三次会变成3。

运行结果如下,这里输出的是自增之前的值,所以为0,1,2而不是1,2,3。

全局static变量_PHP超级全局变量_php全局过滤get

2、如果不使用static关键字,每次调用函数,变量x都会被重新赋值为0,那么每次运行之后的结果都是1。如图:

PHP超级全局变量_php全局过滤get_全局static变量

三、参数作用域

参数是通过调用代码将值传递给函数的局部变量(参数也是一种局部变量)。

参数是在参数列表中声明的,作为函数声明的一部分

php全局过滤get_全局static变量_PHP超级全局变量

上图中的x就是参数变量,在声明函数myTest的时候声明的,什么函数时,还可以给参数变量设置默认值,方式为:function myTest($x = 5){},即给参数变量x设置默认值5,调用函数的时候,就可以不传值了,不传值就默认为5,传了就为传的值。

好了,今天的趣味编程就讲解完毕了,你看懂了吗?看懂了的,在文章下方点个赞!上一期中,我们留了一下问题,变量 x = 5,y = "hello world",问x+y的值是多少?答案是:程序在运行中会报错,x是整型,y是字符串,整型+字符串没法加,所以会报错,如果屏蔽错误,得出的结果是:5,变量y自动强转成0了。是不是很神奇?嘿嘿!给大家推荐一本从0开始学php的书:

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!