php中include文件变量作用域的研究
在php中我们有时候需要include一个文件。比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件就可以,但是这只是我的意淫而已。
写完后发现在模板中所有的变量都提示未定义。通过各种研究和查找资料,总结了include文件时的几种情况下的作用域。
第一种情况:A文件include B文件,在B文件中可以调用A中的变量。
A文件代码:
<?php
$aaa = '123'; include "B.php";
B文件代码:
<?php echo $aaa;
可以正常输出内容。
第二种情况:A文件include B文件,然后在A文件中可以调用B文件的变量。
A文件代码:
<?php include "B.php"; echo $fff;
B文件代码:
<?php $fff = 'i am f';
这个时候是可以正常输出内容的。
第三种情况:A文件的某个类的某个方法中调用B文件,然后在B文件中可以调用该方法中的变量。
A文件代码:
<?php
class test{
public function show(){
$bbb = 'abc';
include "B.php";
}
}
$t = new test;
$t->show();
B文件的代码:
<?php echo $bbb;
这个时候是可以正常输出内容的。
第四种情况:A文件通过定义的一个函数引入B文件,在B文件中无法使用A中的变量,但是可以使用A文件中调用函数(display)中的变量。
A文件代码:
<?php
$aaa = '123'; function display($file){
$bbb= 'asdasdas';
include $file;
} display("B.php");
B文件代码:
<?php
echo $aaa;
echo $bbb;
运行后$aaa提示未定义,$bbb可以正常输出。
原文链接:http://www.cnblogs.com/dragondean/
所以我开始准本用一个display方法来引入模板是不可行的。根据方面的三种情况,最后我选择了写一个类来导入模板文件。目前ThinkPHP和Smarty也都是用类来引入模板文件的。文中不足之处欢迎指正。
php中include文件变量作用域的研究的更多相关文章
- 关于javascript变量作用域的研究。
开始 一个变量的作用域(scope)是程序源代码中定义这个变量的区域.全局变量具有全局作用域,在javascript中的任何地方都是有定义的.然而在函数内申明的变量只在函数体内有定义.他们是局部变量, ...
- JS中for循环变量作用域--解决for循环异步执行的问题
被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域 ...
- php中include文件夹分析
include是包含很多php文件的一种汇总:一般放在文件夹最外层. <?php header("content-type:text/html;charset=utf-8") ...
- PHP和Go中的闭包变量作用域
关于闭包函数,之前在聊过.这里忽略了一点,不管是Go/Php/Python,闭包都存在局部变量的引用.我们还是先看个例子: PHP示例: $list = []; for ($i = 0; $i < ...
- Qt中Pro文件变量详细说明
学习Qt时,发现有些知识看了不经常用就忘了,以下是书本上写的一些关于qmake的相关知识,自己看后,打算把一些经常用到的记下来,整理整理. Qt程序一般使用Qt提供的qmake工具来编译. qmake ...
- JS中for循环变量作用域
http://www.cnblogs.com/zhus/p/6513741.html 博主写得很好
- C/C++语言中变量作用域:局部变量,全局变量,文件级变量
C/C++语言中的变量分为全局变量和局部变量. 这样的划分方式的根据是变量的可见范围或者叫做作用域. 1 局部变量 局部变量指的是定义在{}中的变量,其作用域也在这个范围内.尽管常见的局部变量都是定义 ...
- php学习笔记6--php中的文件包含 include,require,include_once,require_once
php中的文件包含 include,require,include_once,require_once 文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等.php中文件包含指令有4个 ...
- [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域
A. 命令行编译和XCode编译 1.在存在多个.m源码实现文件的情况下,若根据需要引入.m文件,使用命令行仅仅编译主.m文件即可,但是XCode会同时编译全部.m文件,会发生编译错误(重复定义全局变 ...
随机推荐
- 使用GridView来获取xml文件数据
在任何一个系统中,数据的读取和编辑都是至关重要的.无论你是CS还是BS,都需要对数据进行操作.其实 我们可以发现,很多软件和系统最终都是对于数据库中数据的处理.之前在CS的学习过程中我们接触到了很多 ...
- Duanxx的C++得知:计算位数
一旦计算出一个数值数字,基本上它是不断分裂使用10.重新计,看看有多少个数字. 今天发现能够考虑先将数字转换为字符串,然后通过string.length获得数值的位数,这样做方便的多. string ...
- jetty插件开发配置
<plugins> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId&g ...
- splinter python浏览器自动化操作,模拟浏览器的行为
Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有 ...
- 【Cron Expressions】Quartz Scheduler 2.1.x 英文节选
Cron Expressions Cron-Expressions are used to configure instances ofCronTrigger. Cron-Expressions ar ...
- Oracle undo 镜像数据探究
Oracle undo 镜像数据探究 今天是2013-08-18,隔别一周的 ...
- 怎样在android实现uc和墨迹天气那样的左右拖动效果
import android.app.Activity; import android.os.Bundle; import android.content.Context; import androi ...
- Android ListView 常见问题与使用总结
一.机制 ListView机制 - 先运行getCount.然后运行getView. 假设getCount返回0,不运行getView Gallery convertView不会复用.每次都返回NUL ...
- 基于visual Studio2013解决面试题之1006判断升序
题目
- hdu 1421 搬寝室 (dp)
思路分析: dp[i][j] 表示选取到第 i 个 组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...