每天学点电脑知识趣味编程系列之变量作用域
上一期的趣味编程我们讲了变量,这一期,我们要讲变量的作用域。什么是作用域呢?简单通俗的讲,就是变量可以用在什么地方PHP超级全局变量,它的使用范围。打个比方,就像我们数学中,第一
上一期的趣味编程我们讲了变量,这一期,我们要讲变量的作用域。什么是作用域呢?简单通俗的讲,就是变量可以用在什么地方PHP超级全局变量,它的使用范围。打个比方,就像我们数学中,第一题的x、y在第二题中就不能用了,第一题的x、y的值只能用在第一题,差不多就是这个意思。那么下面我们就来看看这个作用域。 官方名词解释:变量的作用域是脚本中变量可被引用/使用的部分。 作用域分为:局部作用域(local)、全局作用域(global)、静态作用域(static)、参数作用域(parameter) 一、局部和全局作用域 在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。简单通俗的讲,全局意思就是到处都可以用,局部意思就是只能在特定的某些地方可以用,下面直接上代码: 代码解释: 1、上图中的x就是全局变量,拥有全局作用域,意思说在整个文件中的函数以外的地方都可以用,图中的function myTest() 就是一个函数,function是用来声明函数用的关键字,myTest就是函数名,x在函数里面不能用,所以在函数里面使用x会报错。 2、myTest函数中,声明了一个变量y,这个变量就是局部变量,拥有局部作用域,它的作用域就是在这个函数范围内,在函数外,就不能使用了,所以最后一行代码输出这个变量y是会报错的。 下面我们看看程序运行结果: 上图中,报了4个notice错误,也就是警告错误,说是在14行中的变量x没有定义,在25行的变量y没有定义。因为14行是在函数中使用x,x的作用域是全局的,函数内不能直接调用,所以报错;25行是在行数外面使用变量 y,y在函数外面没有定义,只在函数里面定义了,这是局部变量,所以在函数外面不用使用,所以也报错了,同时我们可以看到,在行数内使用y,在函数外使用x,都成功输出了x、y的值。 通过上面的例子,你是否理解了什么局部和全局作用域了么? 有人会问,那我如果想在函数里面使用全局变量(全局变量的作用域即为全局作用域)怎么办?其实很简单,只需要使用关键字global即可,如图: 上图中,我在变量x前面加了关键字global,这样,再在函数里面输出变量x,就不会报错了,也可以正常输出变量的值5了,运行结果如下: 除了使用global关键词声明全局变量外,还可以使用超级全局变量$GLOBALS来使用全局变量 x,函数中的变量x可以用$GLOBALS['x'],也是一样的效果。 注意:如果在函数内使用关键字global或者$GLOBALS,可以通过重新给全局变量赋值来改变全局变量原有的值,单纯的使用,不会改变值,如图: 上图中,我们在函数中给全局变量x重新赋值100,我们看一下输出的结果是怎样的: 从运行结果中可以看出,在函数内,我们给全局变量x赋值成功了,在函数外面输出x的值也编程100了。 最后,有人会问,函数内部的局部变量如何在函数外使用?这个问题,我可以告诉你,无解,局部变量之所叫局部变量,他的作用域就是局部的。 二、静态作用域(static) 当一个函数完成时,它的所有变量通常都会被删除,自动释放内存。然而,有时候你希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字,如图: 代码解释: 1、上图中变量x使用了关键字static,在一次函数运行完结时,不会自动删除,会保留上一次调用之后的值,在第一次调用之后,我们对变量x进行了自增1,那么第一次程序运行之后,x会变成1,第二次会变成2,第三次会变成3。 运行结果如下,这里输出的是自增之前的值,所以为0,1,2而不是1,2,3。 2、如果不使用static关键字,每次调用函数,变量x都会被重新赋值为0,那么每次运行之后的结果都是1。如图: 三、参数作用域 参数是通过调用代码将值传递给函数的局部变量(参数也是一种局部变量)。 参数是在参数列表中声明的,作为函数声明的一部分 上图中的x就是参数变量,在声明函数myTest的时候声明的,什么函数时,还可以给参数变量设置默认值,方式为:function myTest($x = 5){},即给参数变量x设置默认值5,调用函数的时候,就可以不传值了,不传值就默认为5,传了就为传的值。 好了,今天的趣味编程就讲解完毕了,你看懂了吗?看懂了的,在文章下方点个赞!上一期中,我们留了一下问题,变量 x = 5,y = "hello world",问x+y的值是多少?答案是:程序在运行中会报错,x是整型,y是字符串,整型+字符串没法加,所以会报错,如果屏蔽错误,得出的结果是:5,变量y自动强转成0了。是不是很神奇?嘿嘿!给大家推荐一本从0开始学php的书: (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |