【问题标题】:"Double" evaluation in PHPPHP中的“双重”评估
【发布时间】:2011-03-29 07:07:56
【问题描述】:

早上好!

我的 MySQL 查询返回一个 PHP 变量名称,我想在输出它时对其进行“双重”评估。以身作则对我来说可能是最好的。

在我的静态资源页面上:

$page1 = "test1.php";
$page2 = "test2.php";

我的名为 tbl_pages 的 MySQL 表在 fld_pagename 下包含 2 个条目:$page1 和 $page2。这样,我认为我只定义了一次 $page1 和 $page2。

现在,在我正在处理的页面上,我有一个返回页面名称的查询:

$query = mysql_query("SELECT fld_pagename FROM tbl_pages WHERE fld_show = 1 ORDER BY fld_ref");
while($row = mysql_fetch_array($query)){
    $nameofpage = $row['fld_pagename'];
    echo "$nameofpage",'<br />';
}

但是,变量周围的双引号仅将变量评估为一个级别。它的输出是:

$page1<br />$page2<br />

但我希望在输出之前评估这些变量:

test1.php<br />test2.php<br />

任何想法都非常感谢!

【问题讨论】:

  • echo $nameofpage.'&lt;br/&gt;'; ? test here

标签: php variables evaluation


【解决方案1】:

如果我理解正确,您可以使用这个 PHP 功能(示例):

$test1=1234;
$test2='test1';
echo $$test2; // echoes 1234

或者,使其与您的系统兼容...

$nameofpage=substr($nameofpage,1); // remove dollar
echo $$nameofpage.'<br/>';

【讨论】:

  • 就是这样 - 谢谢。我尝试了变量变量但忘记删除前导 $
  • 欢迎您,我们很乐意为您提供帮助。
【解决方案2】:

如果您在评估您引用的页面之后,那么这将起作用:

$query = mysql_query("SELECT fld_pagename FROM tbl_pages WHERE fld_show = 1 ORDER BY fld_ref");
while($row = mysql_fetch_array($query)){
    $nameofpage = $row['fld_pagename'];
    include($nameofpage);
    echo '<br />';
}

【讨论】:

  • 谢谢,但这实际上带来了整个页面而不是名称。
【解决方案3】:

如果你只存储不带 $ 的变量名,你可以使用 PHP 的变量特性的变量

   echo $$nameofpage,'<br />';

可以从存储的输入中删除 $

 $nameofpage=substr( $nameofpage, 1 );
 echo $$nameofpage,'<br />';

【讨论】:

  • 谢谢沙克蒂。与克里斯蒂安的评论一样
【解决方案4】:

看来你的数据库设计是错误的。
将 PHP 变量名存储在数据库中的原因不止一个。
存储页面名称本身,你会没事的

【讨论】:

  • 也许他正在尝试创建某种模板系统......这种笼统的论点根本没有建设性......
  • @Christian 我有足够的经验自己判断。
  • 好吧,我有足够的经验来判断那些在最佳实践之间划清界限的人。
  • 我在原始帖子中没有说的事情,因为我不想让它太长:这是一个基于 MySQL 数据库的简单模板站点。我已经在一张资源表上从数据库中列出了某些变量。还有其他方法可以做到这一点。我选择了这种方式,因为它适用于这个网站。
  • 没有“正确的方法”这样的东西,但可能有“更好的方法”。
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 2011-05-01
  • 2019-03-31
  • 2011-08-21
  • 2014-05-11
  • 1970-01-01
  • 2011-04-20
  • 2016-08-19
相关资源
最近更新 更多