【web 开发基础】PHP 变量的作用范围 (29)

简介: 变量的作用范围也就是他的生效范围。大部分的PHP变量只有一个单独的使用范围,也包含了include和require引入的文件。当一个变量执行赋值的动作后,会随着声明区域的位置差异而有不同的使用范围。大致上说,变量会依据声明的位置分为局部变量和全局变量两种。

前言

变量的作用范围也就是他的生效范围。大部分的PHP变量只有一个单独的使用范围,也包含了include和require引入的文件。当一个变量执行赋值的动作后,会随着声明区域的位置差异而有不同的使用范围。大致上说,变量会依据声明的位置分为局部变量和全局变量两种。

局部变量

局部变量也称为内部变量,是在函数内部声明的变量,其作用域仅限于函数内部,离开这个函数后再使用这种变量是非法的。不仅在函数中声明的变量是局部变量,为声明函数设置的参数因为只能在本函数内部使用,所以也是局部变量。区别在于函数的参数具体数值从函数外部获得(函数被调用时传入的值),而直接在函数中声明的变量只能在函数内部被赋值。但他们的作用域都仅限于函数内部,因为当每次函数被调用时,函数内部的变量被声明,执行完毕后函数内部的变量都被释放。如下代码所示:

<?phpfunctiontest($one){
$two=100;
echo"函数内部执行:$one+$two=".($one+$two)."\n";
}
test(300);
echo"在函数外部执行:$one+$two=".($one+$two)."\n";

执行结果如下:

在上面的例子中,声明了一个test()函数,当调用test()时才会声明两个变量$one和$two,这两个变量都是局部变量。变量$one是在参数中声明的并在调用时被赋值300,另一个变量$two是在函数中声明的并直接赋值100,这两个局部变量只能在函数的内部使用,输出计算结果。当test()函数执行结束时,这两个变量就会被释放。因此在函数外部访问这两个变量时时不存在的,所以没有输出结果。如果在函数外部需要调用该变量值,必须通过return指令将其值传回至主程序区块以做后续处理。如下所示:

<?phpfunctiontest($one){
$two=100;
return$one+$two;
}
$sum=test(300);
echo"在函数外部执行:$ one + $ two= ".$sum."\n";

执行结果如下:

全局变量

全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。和其他编程语言不同,全局变量不是自动设置为可用的。在PHP中,由于函数可以视为单独的程序片段,所以局部变量会覆盖全局变量的能见度,我平时会把它称为就近原则。因此在函数中无法直接调用全局变量。

<?php$one=200;
$two=100;
functiontest(){
echo"函数内部执行结果:$ one+$ two=".($one+$two)."\n";
}
test();

执行结果:

在上面的例子中,函数test()外面声明了两个全局变量$one和$two,但在PHP中,不能直接在函数中使用全局变量。所以在test()函数中使用的变量$one和$two,相当于新声明的两个变量,并没有被赋初值,是两个空值运算,所以得到的结果为0.在函数中若使用其全局变量,必须要利用global关键字定义目标变量,以告诉函数主体此变量为全局变量。如下面代码所示:

<?php$one=200;
$two=100;
functiontest(){
global$one,$two;
echo"函数内部执行结果:$ one+$ two=".($one+$two)."\n";
}
test();

执行结果如下:

在函数中使用全局变量,除了使用关键字global,还可以使用特殊的PHP自定义GLOBALS数组。前面的例子的写成使用$GLOBALS替代global。如下面代码所示:

<?php$one=200;
$two=500;
functiontest(){
$GLOBALS['two'] =$GLOBALS['one'] +$GLOBALS['two'];
}
test();
echo"计算结果:".$two;

执行结果如下:

在$GLOBALS数组中,每一个变量是一个元素,键名对应变量名,值对应变量的内容$GLOBALS之所以在全局范围内存在,是因为它是一个超全局变量。关于超全局变量后面我们单独详细介绍。

静态变量

局部变量从存储方式上可分为动态存储类型和静态存储类型,函数中的局部变量,如不专门声明为static存储类型,默认都是动态第分配存储空间的,其中的内部动态变量在函数调用结束后自动释放,如果希望在函数执行完毕后,静态本来并不会消失,而是在所有对该函数的调用之间共享,即在函数再次执行时静态变量将接续前次的结果继续运算,并且仅在脚本的执行期间函数第一次被调用时被初始化。要声明函数变量为静态的,需用关键字static修饰,static用法如下:

1.static 放在函数内部修饰变量

2.static放在类里修饰属性,或方法

3.static放在类的方法里修饰变量

4.static修饰在全局作用域的变量

和局部变量相比,静态变量具有一下特点:

  1. 当函数执行完毕后,静态变量不会消失
  2. 静态变量只能在函数内部使用
  3. 静态变量只会被初始化一次
  4. 静态变量初始化的值可以省略,默认值为 null
  5. 静态变量的初始值只能是具体的字符串、数值等,而不能是一个表达式

注意:在函数外面使用静态变量时并不会报错,这时它的生命周期与作用域和全局变量是一样的;在函数内部定义静态变量时,它的生命周期也和全局变量一样,但是作用域和局部变量的作用域一样的。

静态变量并不是说它的值是不能改变的,不能改变值的那叫常量。 其实静态变量的值是可以改变的,而且它会保持最新的值。之所以称为静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,那么下次函数调用时,这个值是保持不变的

还有一点需要注意的是:静态变量虽然在程序的整个执行过程中始终存在,但是它的作用域和局部变量是一样的,在作用域之外是不能使用的。

如下面代码所示:

<?phpfunctiontest(){
static$one=0;
echo$one."\n";
$one++;
}
test();
test();
test();
test();

执行结果如下:

在上面的例子中,将函数test()中的局部变量$one使用static关键字声明为静态变量,并赋初始值0。函数在第一次执行时,静态变量$one经过运算后从初值0变为1。当函数第一次执行完毕后,静态变量$one并没有被释放,而是将结果保存在静态内存中。第二次执行时,$one从内存中获取上一次计算的结果1,继续运算,并将结果2存于静态内存空间中。以后每次函数执行时,静态变量将从自己的内存空间中获取前次的存储结果,并以此作为初值进行计算。也就是说静态变量只在内存空间中开辟一片空间,不管调用多少次都是共享这个内存空间存储的变量。

目录
相关文章
|
7天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
9天前
|
PHP 开发者
深入浅出PHP:构建你的第一个Web应用
【10月更文挑战第35天】在数字时代的浪潮中,掌握编程技能已成为通往未来的钥匙。本文将带你从零开始,一步步走进PHP的世界,解锁创建动态网页的魔法。通过浅显易懂的语言和实际代码示例,我们将共同打造一个简单但功能强大的Web应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将是你的理想选择。让我们一起探索PHP的魅力,开启你的编程之旅!
|
12天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
20 3
|
13天前
|
前端开发 PHP 云计算
PHP在Web开发中的不可替代性###
——守护Web开发基石,PHP的独特魅力与广泛应用解析
|
15天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
24 3
|
15天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
16天前
|
弹性计算 算法 PHP
PHP在现代Web开发中的不可替代性###
【10月更文挑战第27天】 如今互联网技术日新月异,前后端开发逐渐融合,但PHP凭借其灵活性、广泛应用和深厚社区基础,依然在Web开发领域占据重要地位。本文将深入探讨PHP为何能在现代Web开发中保持其不可替代的地位,并分析其未来的发展趋势。 ###
31 1
|
17天前
|
Unix Linux PHP
PHP在Web开发中的平台独立性优势###
本文探讨了PHP的跨平台特性,阐述其作为服务器端脚本语言如何在不同操作系统上无缝运行,以及这一特性为开发者和组织带来的便利性和成本效益。 ###
|
18天前
|
人工智能 搜索推荐 PHP
PHP在Web开发中的璀璨星辰:构建动态网站的幕后英雄###
【10月更文挑战第25天】 本文将带您穿越至PHP的宇宙,揭示其作为Web开发常青树的奥秘。通过生动实例与深入解析,展现PHP如何以简便、高效、灵活的姿态,赋能开发者打造动态交互式网站,同时不忘探讨其在新时代技术浪潮中面临的挑战与机遇,激发对技术创新与应用的无限思考。 ###
24 1
|
18天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
39 1