实测在class的function中include的文件中非php的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的情况,就觉得有点郁闷了.

(0)

相关推荐

  • iOS开发中#import、#include和@class的区别解析

    1. 一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include. 2. #import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题.<标记> 所以,#import比起#include的好处就是不会引起交叉编译. #import && #class: 1. import会包含这个类的所有信息,包括实体变量和方法(.h文件中),而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,后面会再告

  • Flex include和import ActionScript代码

    在ActionScript中include和import有着截然不同的区别.Include是将一个文件中的代码拷贝到另一个文件中去,也就是将代码拷贝到include语句所在的位置上.Import是添加了对类或包的引用,这样你就可以访问其他的类中定义的对象和属性.通过import导入的代码文件必须存在于你导入的路径上.通过include导入代码文件,输入的文件地址必须与主文件要能在相对路径上寻找到,或者通过绝对路径也可以. 你可以在你的Flex应用程序中使用include语句和< mx:Scrip

  • 实测在class的function中include的文件中非php的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++中#include头文件的示例详解

    fstream是C++ STL中对文件操作的合集,包含了常用的所有文件操作.在C++中,所有的文件操作,都是以流(stream)的方式进行的,fstream也就是文件流file stream. 最常用的两种操作为: 1.插入器(<<) 向流输出数据.比如说打开了一个文件流fout,那么调用fout<<"Write to file"<<endl;就表示把字符串"Write to file"写入文件并换行. 2.析取器(>>

  • PHP中include与require使用方法区别详解

    在PHP变成中,include()与require()的功能相同,include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是二者再用法上有区别:(include()是有条件包含函数,而require()则是无条件包含函数) 1, 使用方式不同 (1) require 的使用方法如 require("requireFile.php"); .这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入

  • 浅谈php中include文件变量作用域

    在php中我们有时候需要include一个文件.比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件就可以,但是这只是我的意淫而已. 写完后发现在模板中所有的变量都提示未定义.通过各种研究和查找资料,总结了include文件时的几种情况下的作用域. 第一种情况:A文件include B文件,在B文件中可以调用A中的变量. A文件代码: <?php $aaa = '123'; include "B.php"; B文件代码: <

  • PHP中include和require的使用详解

    在PHP中,有两种包含外部文件的方式,分别是include和require.他们之间有什么不同呢? 如果文件不存在或发生了错误,require产生E_COMPILE_ERROR级别的错误,程序停止运行.而include只产生警告,脚本会继续执行. 这就是它们最主要的区别,其他方面require基本等同于include. 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找.如果在 include_path 下没找到该文件则 inclu

  • PHP中include()与require()的区别说明

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份.常用的函数,亦可以这个方法将它引入网页中. include 使用方法如 include("MyIncludeFile.php"); .这个函数一般是放在流程控制的处理部分中.PHP 程序网页在读到 include 的文件时,才将它读进

  • JSP中include指令和include行为的区别

    < %@ include file=" "%> < jsp:include page=" " flush="true"/> 前者是指令元素.后者是行为元素.具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题.下面一起来看看吧. 通常当应用程序中所有的页面的某些部分(例如标题.页脚和导航栏)都相同的时候,我们就可以考虑用include.具体在哪些时候用< %@ include file=&q

  • Android开发中include控件用法分析

    本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面设计,不是用一个xml布局就可以搞定的.当一个activity中的控件非常多的时候,所有的布局文件都放在一个xml文件中,很容易想象那是多么糟糕的事情!笔者通过自身的经历,用include控件来解决这个问题,下面是一个小例子,仅仅实现的是布局,没有响应代码的设计. user.xml文件内容如下: <

  • php 中include()与require()的对比

    php的require()与include(),在性能方面并无大的不同. 仅有的一些不同在于: include()执行时文件每次都要进行读取和评估: require()执行时文件只处理一次(实际上,文件内容替换了require()语句). 即如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高. 另外,如果每次执行代码时要读取不同的文件,或有通过一组文件叠代的循环,就应该使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使

  • asp.net中Fine Uploader文件上传组件使用介绍

    最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10].在不同浏览器中提供统一用户体验.该组件基本覆盖目前所有主流浏览器.同时没有任何第三方组件依赖.相当Clear.在服务器端已经覆盖支持了ASP.NET/ColdFusion/Java/Node.js/Perl/PHP/Python. 对上传细节类似限制文件大

随机推荐