作者HuangJC (吹笛牧童)
看板PHP
标题Re: [请益] 有没有法子把 $this pass 掉
时间Sun Jul 13 19:34:15 2008
完全成功了,谢谢大家 XD
;;
本来我还想写一个 parser 咧
自动把 *.thtml 转成 *.php
只做一件事:把 $this 滤掉
这样想太复杂了
1.如果每次都要 parse,那不如存档起来 cache
phpbb3 比起 phpbb2,就是多了好多 cache file
这或许值得学
2.存档在 linux 下必需要有权限,同事提醒我这件事
所以我也想过能不能在变数里执行
$file=读('demo.thtml');
$file=滤($file);
//不存档
eval($file);
想得很简单,碰壁了..
原来 eval 在执行时,不需要最外侧的 <?php ?>
那是不是我把过滤函式写完整一点
把最外侧摘掉就OK 了呢?
我觉得这样会无法在时间内交作业
所以很没骨气的打退堂鼓了 :P
所以 demo.thtml => demo.php 这件事,我是手动做的
现在我成功了,但还是产生新的问题
(也可以开心的说,是新的学习)
其实 demo.thtml 是更复杂点的
HTML DEMO PART<BR/>
<?php
$session->read();
$this->here();
?>
如上,也就是说,我原本就有生一个伪造的 session class
(看呐,我不熟 CakePhp,可是我伪造时也一直模仿,session,很熟悉的变数名吧 XD)
放在 my_try.php 里
class Session
{
function read()
{
//cheat code
}
}
$session=new Session;
这样我就拥有 $session,同时也能应付 $session->read() 这样的要求
但这是指当改造的 demo.php 被直接载入时
当我改版使用 demo.thtml ,在 class 内部载入
发生的问题是 $sesson 并不存在;因为我现在是在 class 内想取用全域变数了!!
所以 my_try.php 改版其实是这样的
class Cheat
{
var $session =new Session;//本来想这样用,不行,因为这得用 $this->session 取用
function here()
{
//cheat code
}
function Cheat
{
global $session; //我得这样,要求取用 global 产生的那个
//上面是旧版,新版更有趣
$session=new Session; //直接在内部产生这个物件,
//不必在全域产生再宣告 global,反正外面用不到它
require 'demo.thtml';
}
}
如上,问题就解决了
回过头来,今晚看懂部份 Cake,我完全就是在模仿它的逻辑 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.59.179.152
※ 编辑: HuangJC 来自: 61.59.179.152 (07/14 02:48)