1.lexiang/index.php
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
<?php define('MODULE_NAME','Index');//在运行时定义一个常量 define('ACTION_NAME','index'); //print_r(__FILE__);E:\wamp\www\Lexiang\index.php //print_r( dirname(__FILE__));//E:\wamp\www\Lexiang dirname(url) require dirname(__FILE__).'/core/fanwe.php'; $fanwe = &FanweService::instance(); $fanwe->initialize(); require fimport('module/index'); IndexModule::index(); ?>
注: 在 PHP 4.0.3 中,dirname() 被修正为 POSIX 兼容。
本质上就意味着如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。
否则返回的是把 path 中结尾的 /component(最后一个斜线以及后面部分)去掉之后的字符串。
注意这意味着在老的函数返回一个空字符串的情形下你通常从 dirname() 得到的是斜线或者一个点。
2.在这里引用一下别人的文章【ThinkPHP中initialize和construct的不同】
地址:http://tanteng.sinaapp.com/2013/04/thinkphp-initialize-construct/
内容:
ThinkPHP中initialize()和construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
在网上搜索,很多答案是两者是一样的,ThinkPHP中initialize相当于php的construct,这么说是错误的,如果这样,tp为什么不用construct,而要自己弄一个ThinkPHP版的initialize构造函数呢?
自己试一下就知道两者的不同了。
a.php
class a{ function __construct(){ echo 'a'; } }
b.php(注意:这里构造函数没有调用parent::__construct();)
include 'a.php'; class b extends a{ function __construct(){ echo 'b'; } } $test=new b();
运行结果:
b
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
如果b.php的构造函数加上parent::__construct(),就不同了。
include 'a.php'; class b extends a{ function __construct(){ parent::__construct(); echo 'b'; } } $test=new b();
那么输出结果是:
a b
此时才执行了父类的构造函数。
我们再来看看thinkphp的initialize()函数。
BaseAction.class.php
class BaseAction extends Action{ public function _initialize(){ echo 'baseAction'; }
IndexAction.class.php
class IndexAction extends BaseAction{
public function (){
echo 'indexAction';
}
运行Index下的index方法,输出结果:
baseActionindexAcition
可见,子类的_initialize方法自动调用父类的_initialize方法。而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
这就是ThinkPHP中initialize和construct的不同。