Home >php教程 >php手册 >php中include文件变量作用域的研究,

php中include文件变量作用域的研究,

WBOY
WBOYOriginal
2016-06-13 09:01:571015browse

php中include文件变量作用域的研究,

 

在php中我们有时候需要include一个文件。比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件就可以,但是这只是我的意淫而已。

写完后发现在模板中所有的变量都提示未定义。通过各种研究和查找资料,总结了include文件时的几种情况下的作用域。

 

第一种情况:A文件include B文件,在B文件中可以调用A中的变量。

A文件代码

<?<span>php
 </span><span>$aaa</span> = '123'<span>;
 
 </span><span>include</span> "B.php";

B文件代码:

<?<span>php

</span><span>echo</span> <span>$aaa</span>;

可以正常输出内容。

 

第二种情况:A文件include B文件,然后在A文件中可以调用B文件的变量。

A文件代码

<?<span>php

</span><span>include</span> "B.php"<span>;

</span><span>echo</span> <span>$fff</span>;

B文件代码

<?<span>php

</span><span>$fff</span> = 'i am f';

这个时候是可以正常输出内容的。

 

第三种情况:A文件的某个类的某个方法中调用B文件,然后在B文件中可以调用该方法中的变量。

A文件代码

<?<span>php

</span><span>class</span><span> test{
    </span><span>public</span> <span>function</span><span> show(){
        </span><span>$bbb</span> = 'abc'<span>;
        </span><span>include</span> "B.php"<span>;
    }
}

</span><span>$t</span> = <span>new</span><span> test;
</span><span>$t</span>->show();

B文件的代码

<?<span>php

</span><span>echo</span> <span>$bbb</span>;

这个时候是可以正常输出内容的。

第四种情况:A文件通过定义的一个函数引入B文件,在B文件中无法使用A中的变量,但是可以使用A文件中调用函数(display)中的变量。

A文件代码:

<?<span>php
</span><span>$aaa</span> = '123'<span>;

</span><span>function</span> display(<span>$file</span><span>){
    </span><span>$bbb</span>= 'asdasdas'<span>;
    </span><span>include</span> <span>$file</span><span>;
}

display(</span>"B.php");

B文件代码:

<?<span>php
</span><span>echo</span> <span>$aaa</span><span>;
</span><span>echo</span> <span>$bbb</span>;

运行后$aaa提示未定义,$bbb可以正常输出。

 原文链接:http://www.cnblogs.com/dragondean/

所以我开始准本用一个display方法来引入模板是不可行的。根据方面的三种情况,最后我选择了写一个类来导入模板文件。目前ThinkPHP和Smarty也都是用类来引入模板文件的。文中不足之处欢迎指正。

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn