概论为什么PHP全局变量不能生效
对于一个新手在实际操作
但在实际操作时,会接连碰到几次全局变量无效的郁闷的事,下面就重点看一下PHP全局变量不能生效的原因及解决办法。
1.PHP全局变量不能生效错误重现
问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:
t1.php
- ?
- run(); //执行
- function run(){
- include 'func.php';
- showGlobal();
- }
- ?>
func.php1
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><span> ? </span></span></span></li> <li> <span>$</span><span class="attribute">vars</span><span> = </span><span class="attribute-value">'I am global!'</span><span>; </span> </li> <li class="alt"><span>function showGlobal(){ </span></li> <li><span>global $vars; </span></li> <li class="alt"><span>print('我使用全局变量:'.$vars); </span></li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
很简单的两个文件(第一次发现问题时,远比这复杂,在一层层排错后,得出最少化的问题重现环境),func.php是定义好的第三方函数,该函数使用了一些全局变量,如果这时把这两个文件放在一起,执行一下t1.php,会发现showGlobal里的$vars是显示不出来的,global失效了?
2.PHP全局变量不能生效错误原因
搜索后发现,php.net上很早就有人提出过,也有人给出了解释:
原来,在t1.php的run函数中include func.php时,func.php中的变量$vars的作用域只是在run之内,而在showGlobal中使用global声明的$vars是要求属于t1.php的不是run函数的,所以为空)
3.PHP全局变量不能生效解决方法
知道原因后,解决就很简单,可以把include 从run中移出来,这样,func.php中的$vars就属于t1.php了;也可以在run里用global声明一下$vars,这样也可以把原来属于run的$vars声明为全局(属于t1.php);
虽然问题可以简决,但用起来还是很不爽, 因为在我的phpec框架中,include的情况比较普遍,不可能把view中按需include的移到外层去,使用global的话,我在使用第三方函数时,又不会也不想去了解它用了什么全局变量,而且,层次结构一多,就….
PHP全局变量不能生效的原因总结:
1)尽量减少多级和函数中include文件.
2)尽量不用全局变量

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在PHP8 中,match表达式是一种新的控制结构,用于根据表达式的值返回不同的结果。1)它类似于switch语句,但返回值而非执行语句块。2)match表达式使用严格比较(===),提升了安全性。3)它避免了switch语句中可能的break遗漏问题,增强了代码的简洁性和可读性。

H5页面需要持续维护,这是因为代码漏洞、浏览器兼容性、性能优化、安全更新和用户体验提升等因素。有效维护的方法包括建立完善的测试体系、使用版本控制工具、定期监控页面性能、收集用户反馈和制定维护计划。

JavaScript 是否可在无 HTML5 环境下运行?JavaScript 引擎自身可独立运行。在浏览器环境中运行 JavaScript 依赖 HTML5,因其提供加载和执行代码所需的标准化环境。HTML5 提供的 API 和特性对现代 JavaScript 框架和库至关重要。离开 HTML5 环境,许多 JavaScript 功能难以实现或无法实现。

在PHP中可以通过使用不可预测的令牌来有效防范CSRF攻击。具体方法包括:1.生成并在表单中嵌入CSRF令牌;2.在处理请求时验证令牌的有效性。

H5 页面制作的优势包括:轻量级体验,加载速度快,提升用户留存率。跨平台兼容性,无需针对不同平台适配,提升开发效率。灵活性和动态更新,无需审核,便于内容修改和更新。成本效益,开发成本比原生 App 低。

PHP中的...(splat)操作符用于函数参数和数组解包,提升代码简洁性和效率。1)函数参数解包:将数组元素作为参数传递给函数。2)数组解包:将一个数组解包到另一个数组中或作为函数参数。

在PHP中,final关键字用于防止类被继承和方法被重写。1)标记类为final时,该类不能被继承。2)标记方法为final时,该方法不能被子类重写。使用final关键字可以确保代码的稳定性和安全性。

如何解决用户代理样式表导致的显示问题?在使用Edge浏览器时,项目中的一个div元素无法显示。经过查看,发�...
