【问题标题】:PHP variable is not accessible in HTML template在 HTML 模板中无法访问 PHP 变量
【发布时间】:2013-05-20 18:53:17
【问题描述】:

index.php

<?php 
$title = "World";
echo loadTemplate();
?>

Template.php

<?php
function loadTemplate(){
    return <<<EOF
    Hello {$title}
    EOF;
}
?>

在运行 index.php 时,它应该输出Hello World,但它只打印Hello。如何让我的脚本回显Hello World

【问题讨论】:

    标签: php html function templates variables


    【解决方案1】:

    当你想在函数中使用全局变量时,你需要声明它,使用 global 关键字将它带入作用域:

    function loadTemplate() {
      global $title;
      return <<<EOF
        Hello {$title}
        EOF;
    }
    

    【讨论】:

    • 在没有全局和传递参数的情况下有更好的主意
    • 我怀疑还有其他的方法
    【解决方案2】:

    globals:

    此脚本不会产生任何输出,因为 heredoc 引用了 $title 变量的本地版本,并且尚未在此范围内为其分配值。

    你需要告诉 PHP 你想使用$title 作为一个全局变量。

    function loadTemplate(){
        global $title;
        return <<<EOF
        Hello {$title}
        EOF;
    }
    

    或者,由于全局变量很混乱,所以最好将其作为参数传递:

    function loadTemplate($what){
        global $title;
        return <<<EOF
        Hello {$what}
        EOF;
    }
    
    echo loadTemplate($title);
    

    【讨论】:

    • 在没有全局和传递参数的情况下有更好的主意
    • 我能想到的唯一其他选择是完全面向对象,定义一个类并将值存储为类实例的属性。除非这是一个非常简化的示例,否则这可能不是“更好”。如果您拒绝使用参数(这是几乎所有编程语言中执行此类操作的标准方法),也很难确定什么会更好。
    【解决方案3】:

    使用globals 是非常草率和糟糕的做法。它显示了一个懒惰的开发人员,当您稍后再看它时,您不会知道$title 是什么。

    $title = "World";
    echo loadTemplate($title);
    
    function load_template($title)
    {
        return <<<EOF
    Hello, {$title}
    EOF;
    }
    

    有关更多信息,您应该查看variable scope

    注意:您的原始代码不正确,在您的情况下,结束标识符 EOF 不能缩进。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2019-05-24
      • 1970-01-01
      • 2014-07-20
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多