【问题标题】:PHP: Use global variables from include filePHP:使用包含文件中的全局变量
【发布时间】:2013-09-02 07:49:39
【问题描述】:

有很多类似的问题,但我无法解决: 我尝试在这样的包含文件中使用全局变量:

包含的.php:

<?php
  function some_function()
  {
     $GLOBALS['username'] = $_SERVER["REMOTE_USER"];
  }
?>

first.php:

<?php
  include 'included.php';
  some_function()

  echo '<p>Hello ' . $GLOBALS['username'] . '!'</p>'
?>

second.php:

<?php
  include 'included.php';

  echo '<p>Hello ' . $GLOBALS['username'] . '!'</p>'
?>

first.php 的输出工作正常,但是在 second.php 中有一个错误:

注意:未定义索引:第 36 行 /var/www/students/reservations.php 中的 student_firstname

所以我的目标是在我的整个项目中使用这个全局变量“用户名”,我不想每次都调用 some_function(),因为 SQL 查询中有更多变量,所以这会花费太长时间。

有什么好的方法可以做到这一点,或者你能推荐我另一种方法吗? 谢谢!

【问题讨论】:

  • 当您需要使用全局变量时,这是一个糟糕的设计。你应该尽量避免这种方法
  • 那么你有什么建议?我总是在需要变量时执行 SQL 查询?
  • 所以问题是当你不调用函数时变量没有被设置......那么在included.php中调用函数呢,或者不将代码包装在一个函数中需要单独调用吗?也是的,全局变量是不好的做法。您应该准备一次该变量,然后根据需要将其传递给函数。
  • 实现一个构建底层缓存层的接口。因此,当您调用 getUser() 时,它会存储上一次调用的副本并返回结果。您还应该花时间构建缓存失效器,以使该系统正常工作。

标签: php include global-variables


【解决方案1】:

为此目的有一个关键字global。但这被认为是一种非常糟糕的做法,并且违反了封装等。

$username = "Test" ;

function some_function(){
  global $username ;  //Put a global variable into current space.
  echo $username ;    //Now you can access the global variable.
}

附:学习将变量作为参数传递给函数,因为这会让你的生活变得非常轻松。

【讨论】:

    【解决方案2】:

    您可以使用 PHP 会话, 例如在您的索引页上有代码;

    <?PHP  
    session_start();
    $_SESSION['username']=$_SERVER["REMOTE_USER"];
    ?>
    

    然后在你需要放置的所有页面之上;

    <?PHP  
    session_start();
    ?>
    

    标签上方。

    然后你可以简单地调用用户名

    <?PHP echo $_SESSION['username']; ?> and that will display their username.
    

    来源:从事 PHP/HTML/CSS 开发人员 3 年。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多