loserwn同学最近在测试一个新的东东,发现在一个文件里调用的global变量不起作用:
a.php:
$g_v = 'aa';
function g_test(){
var_dump($g_v);
}
b.php:
include('a.php');
class xxx{
public function run(){
g_test();
//结果是NULL
}
}
从理论上来讲,a.php中的代码没有任何问题,b.php直接调用的是全局函数,应该也没有问题啊,可是死活就是获取不到全局变量的值,然后在a中调用g_test(),单独运行a.php,没有问题;单独写一个文件include,然后调用g_test(),也没有问题,直接google ”php global“也没有找到有用的信息,后来仔细一想,有可能跟类的autoload有关,又仔细阅读了php关于autoload的手册,在”EXAMPLE“部分看到有人提到这个问题:
”While using an "autoloading" method you should
pay attention to variables scope. Because of new file will be included
INSIDE of magic function __autoload - all of declared in such file
global scope variables will be only available within this function and
nowhere else. This will cause strange behaviour in some cases.
“
大意是:当使用autoload方法时,要格外注意变量的作用域。由于新文件是在_autoload函数里进行include,所以include的“新文件”中的“全局变量”就成了__autoload函数的局部变量,只能在__autoload函数作用域内引用。在某种情况下可能会导致一些奇怪的现象。
我们的项目使用了框架,自然会用到autoload,所以也就导致了无法获取global变量的情况,也就是说,实际的代码是:
__autoload(){
inlucde(b.php);
--include(a.php);
//已经是局部变量
--$g_v = 'aa';
--function g_test(){
-- //全局变量没有$g_v
-- global $g_v;
-- var_dump($g_v);
--}
g_test();
}
这是一个很麻烦的问题,php官网应该将这个内容加到__autoload或者global的说明文档中,而不是以example的方式。
分享到:
相关推荐
AtPhpSettings 用于配置php设置的ZF2模块。 要求 ...要根据需要配置php设置,请将以下内容添加到config / autoload / global.php文件中: 'php_settings' => [ 'display_startup_errors' => false ,
// Installed via `composer [global] require`. $autoloader = realpath($rootDir . '/../../autoload.php'); } if (! $autoloader) { throw new RuntimeException( 'ApiGen was ...
Zend Framework 2 的 Smarty 模块安装将config/smarty.global.php复制到您的config/autoload/目录。 $ cp vendor/ngyuki/zf2-smarty/config/smarty.global.php config/autoload/ 修复config/autoload/smarty.global....
EventDispatcher 这个模块是旧的,笨拙的,没有维护,所以请不要使用它:) ...到config/autoload/event_dispatcher.global.php 恭喜你您已完成,并且库已成功安装(希望如此)。 要订阅mvc事件,这就像将您的侦
#Zend Framework 2 管理后台 Zend Framework 2 开发管理后台, 开源项目 ...也可使用其它库名, config/autoload/global.php 修改配置 (可忽略此步骤) 按照ZF2 官方文档配置虚拟主机 ServerName zf
将zf2-analytics.global.php.dist文件复制粘贴到您的autoload文件夹,然后通过将Zf2Analytics添加到您的application.config.php文件来启用该模块。 用法 use Racecore \ GATracking \ GATracking ; $ analytics = ...
HtProfileImage Zend 框架 2 模块,为 ZfcUser 添加了个人资料图片上传功能 ... 将位于config/htprofileimage.global.php文件复制到./config/autoload/htprofileimage.global.php并根据需要更改值 如果您想为
... 将config/bsb_doctrine_translation_loader.global.php.dist复制到config/autoload目录下即可跳转启动配置。 通过导入运行创建所需的数据库表; mysql 数据库 < etc>=PHP5.3 >=ZF2.2
将位于vendor/hrevert/ht-user-registration/config/ht-user-registration.global.php文件复制到./config/autoload/ht-user-registration.global.php并根据需要更改值。 此外,按照文档中的说明配置 。
将位于vendor/hrevert/ht-img-module/config/ht-img-module.global.php到config/autoload并根据需要更改值 基本用法 首先,你需要创建一个过滤器的服务, my_thumbnail在/module/Application/config/module.config....
Swagger模块一个Zend Framework模块,... 'SwaggerModule' ),配置将config/module.swagger.global.php.dist复制到config / autoload文件夹并修改路径变量用法有关库使用信息,请参见 。 $ swagger = $ this -> getServ
phpreturn [ 'modules' => [ 'ZendDeveloperTools' , 'ZendYamlConfig' , 'Application' , ], 'module_listener_options' => [ 'config_glob_paths' => [ 'config/autoload/{,*.}{global,local}.php' , ],
首先将文件config/MCNElasticSearch.global.php复制到您的config/autoload/目录。 types 数组是一个关联数组名称 => 映射信息。 对于映射中的所有选项,请检查MCNElasticSearch\Options\TypeMappingOptions目前只有...
$autoload_filters [自动加载过滤器变量] $compile_check [编译检查变量] $force_compile [强迫编译变量] $caching [缓存变量] $cache_dir [缓存目录变量] $cache_lifetime [缓存生存时间变量] $cache_handler...
$autoload_filters [自动加载过滤器变量] $compile_check [编译检查变量] $force_compile [强迫编译变量] $caching [缓存变量] $cache_dir [缓存目录变量] $cache_lifetime [缓存生存时间变量] $cache_handler...