在这里面的函数里面的函数里面使用PHP变量

时间:2010-06-18 15:52:18

标签: php class variables heredoc

如果标题还没吓到你,请继续阅读。我正在使用ExpressionEngine网站,我正在编辑成员模板文件。与成员交互相关的所有模板都作为函数存储在一个单独的文件中。

这些函数中的每一个都是一个简单的文档,但是其中许多函数使用我不关心的路径和术语来打印代码。例如,该网站将登录用户称为“客户”而不是“成员”。

无论如何,我正在寻找一种方法来抽象这些值,以便我可以轻松地为这个和未来的项目更改它们。现在,我可以通过在每个函数中定义来在这里打印变量。在定义类之前,我更倾向于在文件的顶部定义这些值,但是我无法通过这里的文档来识别这些值。

这是一个精简的示例文件:

<?php
/* I wish to define variables once in this area */
$globaluserterm = "client";

class profile_theme {

//----------------------------------------
//  Member Page Outer
//----------------------------------------
function member_page()
{
$userterm = "client";
return <<<EOF
<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager}
</div>
EOF;
}
/* END */

//-------------------------------------
//  Full Proile with menu
//-------------------------------------
function full_profile()
{
$userterm = "client";
return <<< EOF
<div id="{$userterm}-full-profile">
    {include:content}
</div>
EOF;
}
/* END */


}
// END CLASS
?>

2 个答案:

答案 0 :(得分:3)

如果每个文件只有一个类,那么在类级别定义值是否足够? E.g。

class profile_theme {
    private $globaluserterm = "client";
    //....
}

并在函数中:

return <<<EOF
<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$this->globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager}
</div>
EOF;

答案 1 :(得分:1)

我并不完全明白你的目标,但我认为你所寻找的是像Smarty这样的模板引擎。 (有关更精简的替代方案,请参阅this question。)

在Smarty中,您将准备一个模板文件:

<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager} /* Don't know how to do this in smarty */
</div>

并预先填充变量值:

$Smarty = new Smarty();
// ... set up caching etc. if needed  ...

$Smarty->assign("userterm", $value1);
$Smarty->assign("globaluserterm", $value2);
..... 

如果这不是你想要的,你能更详细地解释一下你想做什么吗?