Warum l?dt die PHP-Framework-Controller-Ebene eine Datei mit dem Suffix .tpl, das ich in die Datei geschrieben habe
<?php
echo $name; //居然能輸出正確的值
//Frage: Warum k?nnen Dateien mit dem Suffix .tpl auch PHP-Skripte ausführen? Ist es nicht m?glich, PHP nur mit .PH-Dateien zu analysieren?
走同樣的路,發(fā)現(xiàn)不同的人生
PHP解釋器只關(guān)心文件內(nèi)容,擴(kuò)展名是什么它并不關(guān)心
在代碼里面require/include其它的文件,是在一次編譯運(yùn)行的周期里面的,而不是每次開一個(gè)新文件新開一個(gè)解釋器
為了方便和其它文件區(qū)分,在web服務(wù)器上面會配置某種擴(kuò)展名發(fā)送給PHP,這只是對入口文件有約束,運(yùn)行起來之后后面require/include了什么和這個(gè)配置早已無關(guān),不這么做的話,變成什么文件類型都會送到PHP里面過一遍,出于性能和安全性考慮這都是不現(xiàn)實(shí)的(換句話說,你需要獨(dú)立看待PHP和Web服務(wù)器)
舉個(gè)例子
對于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>
其實(shí)你都可以改,改成任意自己希望的擴(kuò)展名,或者甚至全匹配(當(dāng)然不建議真的這么干)
框架本身加載.tpl文件后解析為php代碼了。就好像你用php加載一個(gè)xml文件然后解析xml然后輸出一樣。我說的也不算很準(zhǔn)確,但是差不多這個(gè)意思吧。