首页 php教程 php手册 概论为什么PHP全局变量不能生效

概论为什么PHP全局变量不能生效

Jun 13, 2016 am 11:10 AM
php 不能 为什么 全局 变量 新手 生效

对于一个新手在实际操作

但在实际操作时,会接连碰到几次全局变量无效的郁闷的事,下面就重点看一下PHP全局变量不能生效的原因及解决办法。

1.PHP全局变量不能生效错误重现

问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:

t1.php

  1.  ?  
  2. run(); //执行  
  3. function run(){  
  4. include 'func.php';  
  5. showGlobal();  
  6. }  
  7. ?> 

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)尽量不用全局变量


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
IIS和PHP的兼容性:深度潜水 IIS和PHP的兼容性:深度潜水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

如果session_start()被多次调用会发生什么? 如果session_start()被多次调用会发生什么? Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

作曲家:通过AI的帮助开发PHP 作曲家:通过AI的帮助开发PHP Apr 29, 2025 am 12:27 AM

AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。

session_start()函数的意义是什么? session_start()函数的意义是什么? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

php框架laravel和yii区别是什么 php框架laravel和yii区别是什么 Apr 30, 2025 pm 02:24 PM

Laravel和Yii的主要区别在于设计理念、功能特性和使用场景。1.Laravel注重开发的简洁和愉悦,提供丰富的功能如EloquentORM和Artisan工具,适合快速开发和初学者。2.Yii强调性能和效率,适用于高负载应用,提供高效的ActiveRecord和缓存系统,但学习曲线较陡。

给MySQL表添加和删除字段的操作步骤 给MySQL表添加和删除字段的操作步骤 Apr 29, 2025 pm 04:15 PM

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,删除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段时,需指定位置以优化查询性能和数据结构;删除字段前需确认操作不可逆;使用在线DDL、备份数据、测试环境和低负载时间段修改表结构是性能优化和最佳实践。

H5:HTML5的关键改进 H5:HTML5的关键改进 Apr 28, 2025 am 12:26 AM

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

说明如何使用会话进行用户身份验证。 说明如何使用会话进行用户身份验证。 Apr 26, 2025 am 12:04 AM

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

See all articles