首页 > PHP简单MVC实现的疑惑

PHP简单MVC实现的疑惑

为什么PHP框架控制器层加载一个.tpl为后缀的文件,我在文件里面写
<?php

echo $name; //居然能输出正确的值

//问题,为啥.tpl后缀的文件为啥也能执行PHP脚本呢??不是用过.PH的文件才能解析PHP吗?


  1. PHP解释器只关心文件内容,扩展名是什么它并不关心

  2. 在代码里面require/include其它的文件,是在一次编译运行的周期里面的,而不是每次开一个新文件新开一个解释器

  3. 为了方便和其它文件区分,在web服务器上面会配置某种扩展名发送给PHP,这只是对入口文件有约束,运行起来之后后面require/include了什么和这个配置早已无关,不这么做的话,变成什么文件类型都会送到PHP里面过一遍,出于性能和安全性考虑这都是不现实的(换句话说,你需要独立看待PHP和Web服务器)

举个例子
对于nginx来说,是

    location ~ .*\.(php|php5)?$
    {
        fastcgi_pass   unix:/var/run/php.socket;
        fastcgi_index  index.php;
        include        fastcgi.conf;
    }

对于apache来说,也就是

 <FilesMatch \.php$>
    SetHandler application/x-httpd-php
 </FilesMatch>

其实你都可以改,改成任意自己希望的扩展名,或者甚至全匹配(当然不建议真的这么干)


框架本身加载.tpl文件后解析为php代码了。就好像你用php加载一个xml文件然后解析xml然后输出一样。我说的也不算很准确,但是差不多这个意思吧。


这是模板文件

可以看看smarty模板的介绍

【热门文章】
【热门文章】