【问题标题】:PHP extract() and include() -> passing variables [closed]PHP extract() 和 include() -> 传递变量 [关闭]
【发布时间】:2013-06-07 02:27:49
【问题描述】:

如果这些变量来自 extract(),如何为包含文件传递变量。

代码

<?php
    $hello = 'hello';
    include('world.php');
?>

<?php //world.php
    echo $hello;
?>

像魅力一样工作

但是,万一呢?

<?php
    $arr = array('hello' => 'hello');
    extract($arr);
    echo $hello //it will print : hello
    include('world.php');
?>

<?php //world.php
    echo $hello; //it will print an error: Notice: Undefined variable: hello
?>

那么,如何将“提取的”变量传递给包含的文件?

【问题讨论】:

  • 您的脚本有一个解析错误,echo $hello 后面缺少分号。
  • 也许是缺少;,但你错了,变量就是变量,不管你如何生成它,如果没有其他错误,你的第二个示例应该可以正常工作。跨度>
  • @jeroen :它可以是任何 php 的配置参数吗?像 (自 php 5.3 起已弃用)或 php.ini 上的任何其他内容?
  • 对我来说一切正常。你的 php 版本是多少?
  • 分号问题解决了吗?

标签: php include scope


【解决方案1】:

该变量将在包含文件的范围内可用。

如果你有

$arr = array("who"=>$world);
extract($arr);

在包含范围内,您将能够

Hello <?= $who ?>

这是制作低脂模板函数的简单方法,例如:

function renderTemplate($template, $args){
     extract($args);
     include($template);
}

由于提取调用是在函数中进行的,它不会污染全局空间,并且可以轻松表示非程序员类型的符号。

【讨论】:

  • 这正是我想要的,也是我迄今为止所做的,但是,由于某种原因,它在我的本地主机上不起作用。
  • 将错误报告提高到 11,看看是否有任何收获。还要记住模板中的 php 必须在 &lt;?php ?&gt;
  • 另外,如果您有兴趣,我在 github 上有一点 toy project,它通过将包含包装在匿名函数中来提高这种技术,因此迭代包含只会导致文件系统上的一次点击.我会对人们的想法感兴趣。
  • @DiegoFavero 错误报告在说什么?
  • 我建议这样做是因为我认为 include_once 会在检查文件中呈现部分内容时出现问题。但是您只想包含一次帮助程序和控制器,这样就很好了。
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多