实测在class的function中include的文件中非php的global全局环境

2015-01-24信息快讯网

正如标题所言经测试的结果为:在class中include后,被include文件变量域已经变成func中了,非全局.但是可以通过global提升,感兴趣的朋友可以参考下哈,希望对大家有所帮助

测试代码1.php
 
<?php 
$g1 = 'g1'; 
class c{ 
function fun() { 
include('2.php'); 
echo "\n-----in class fun---\n"; 
global $g1; 
var_dump("\$g1 => ", $g1 
,'$g2 => ', $g2 
,'$gg2 => ', $gg2 
); 
echo "\n--------\n"; 
} 
} 
c::fun(); 
echo "\n--- in 1.php ----\n"; 
var_dump('$g1 => ', $g1 
,'$g2 => ', $g2 
,'$gg2 => ', $gg2); 
echo "\n--- ----\n"; 

代码2.php
 
<?php 
$g2 = 'g2'; 
global $gg2;//本环境下并非全局,需要提升 
$gg2 = 'gg2'; 
function g2fun() { 
global $g1, $g2, $gg2; 
echo "\n--- in g2fun ----\n"; 
var_dump('$g1 => ', $g1, '$g2 => ', $g2 
, '$gg2 => ', $gg2); 
echo "\n--- ----\n"; 
} 
g2fun(); 
echo "\n--- in 2.php ----\n"; 
var_dump('$g1 => ', $g1, '$g2 => ', $g2 
, '$gg2 => ', $gg2 
); 
echo "\n--- ----\n"; 
global $g1; 
echo "\n--- in 2.php global----\n"; 
var_dump('$g1 => ', $g1, '$g2 => ', $g2 
, '$gg2 => ', $gg2 
); 
echo "\n--- ----\n"; 

结果
 
--- in g2fun ---- 
string(7) "$g1 => " 
string(2) "g1" 
string(7) "$g2 => " 
NULL 
string(8) "$gg2 => " 
string(3) "gg2" 
--- ---- 
--- in 2.php ---- 
string(7) "$g1 => " 
NULL 
string(7) "$g2 => " 
string(2) "g2" 
string(8) "$gg2 => " 
string(3) "gg2" 
--- ---- 
--- in 2.php global---- 
string(7) "$g1 => " 
string(2) "g1" 
string(7) "$g2 => " 
string(2) "g2" 
string(8) "$gg2 => " 
string(3) "gg2" 
--- ---- 
-----in class fun--- 
string(7) "$g1 => " 
string(2) "g1" 
string(7) "$g2 => " 
string(2) "g2" 
string(8) "$gg2 => " 
string(3) "gg2" 
-------- 
--- in 1.php ---- 
string(7) "$g1 => " 
string(2) "g1" 
string(7) "$g2 => " 
NULL 
string(8) "$gg2 => " 
string(3) "gg2" 
--- ---- 

由此可见,
在class中include后,被include文件变量域已经变成func中了,非全局.
但是可以通过global提升.
一般被include文件在编写时,可能会由于没有注意到被include的情况,就觉得有点郁闷了.
php使用smtp发送支持附件的邮件示例
php实现上传图片生成缩略图示例
php使用curl和正则表达式抓取网页数据示例
PHP header()函数常用方法总结
开源php中文分词系统SCWS安装和使用实例
PHP扩展模块Pecl、Pear以及Perl的区别
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
php实现httpclient类示例
PHP包含文件函数include、include_once、require、require_once区别总结
php警告Creating default object from empty value 问题的解决方法
ThinkPHP使用UTFWry地址库进行IP定位实例
thinkphp验证码显示不出来的解决方法
php的declare控制符和ticks教程(附示例)
php的zip解压缩类pclzip使用示例
php function用法如何递归及return和echo区别
PHP 函数call_user_func和call_user_func_array用法详解
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
ie与session丢失(新窗口cookie丢失)实测及解决方案
Php output buffering缓存及程序缓存深入解析
PHP 转义使用详解
thinkphp 一个页面使用2次分页的实现方法
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
PHP 伪静态技术原理以及突破原理实现介绍
深入Nginx + PHP 缓存详解
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- PHP 自排序二叉树的深入解析
解析func_num_args与func_get_args函数的使用
解析php中eclipse 用空格替换 tab键
解析php addslashes()与addclashes()函数的区别和比较
Function eregi is deprecated (解决方法)
解析php中call_user_func_array的作用
PHP 常用数组内部函数(Array Functions)介绍
PHP register_shutdown_function函数的深入解析
©2014-2024 dbsqp.com