2008年12月29日 星期一

介紹一種詭異的PHP動態include 方式

在PHP中, 引用外部檔語法如下:
include 'xxx.php';

若定義一個function傳回字串, 可以寫成:
function A() {
return 'xxx.php';
}
include A();

若定義一個class, 利用magic method, 可以寫成:
class B() {
function __toString() {
return 'xxx.php';
}
}
$B = new B;
include $B;

因為還要多一個new的動作, 包裝一下, 最後就變成:
function C() {
$B = new B;
return $B;
}
include C();

好吧, 連我自己都覺得有點變態...
這麼做有什麼好處 ?
因為我用過幾個PHP的template engine(例如smarty),
template engine的好處很多,
但是最令我無法忍受的是變數要手工一個個assign實在非常愚蠢.
英文叫: Repeat yourself!
其中牽涉到變數scope的問題, 利用上述技巧可以避開繁瑣的Assign.

打的有點累, 實做細節有機會再詳述.

沒有留言: