【问题标题】:Using PHP variables inside of here documents inside of functions inside of a class在类中的函数中使用此处文档中的 PHP 变量
【发布时间】:2011-03-05 12:14:23
【问题描述】:

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

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

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

这是一个删节的示例文件:

<?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
?>

【问题讨论】:

  • 语法高亮这次真的很混乱 ;)
  • @Felix 是的,Prettify 似乎不知道heredoc 语法。应该作为错误提交...

标签: php class variables heredoc


【解决方案1】:

如果每个文件只有一个类,那么在类级别定义值可能已经足够了?例如

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;

【讨论】:

  • 做到了。我不完全理解类是如何工作的,并且在发布到这里之前我尝试了不正确的方法来引用私有 $globaluserterm 变量。谢谢,菲利克斯!
【解决方案2】:

我不完全了解您在做什么,但我认为您正在寻找的是像 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);
..... 

如果这不是您想要的,您能否更详细地解释您想要做什么?

【讨论】:

  • 另外,他可以通过包含使用 PHP(因为它是一种模板语言),放弃 Smarty 开销,即&lt;h1&gt;&lt;?php echo $vars['userterm'] ?&gt; Account&lt;/h1&gt;
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2014-12-20
  • 2016-07-14
  • 2019-11-10
相关资源
最近更新 更多