临时变量

时间:2010-07-01 16:01:39

标签: php variables string

我有一个函数可以从数据库中检索一些数据,将其格式化为HTML,然后将此HTML存储到变量$output中。问题是,$output现在无法在其他功能运行之后在屏幕上回显。此数据也必须在此阶段检索,而不是在以后检索。

那么在输出到屏幕后,如何在另一个函数中调用此$output变量?

7 个答案:

答案 0 :(得分:5)

您可以在主脚本中定义$output,然后将其导入到函数中:

function output() 
 {  
   global $output;

这可能适用于你手头的情况。但是,将全局变量空间与这样的东西一起使用被认为是不好的做法,这是正确的。 (相信我,我已经完成了。:)

还有一些其他方法可以更好地实现长期代码质量和可维护性。

全局配置数组

您可以为所有全局设置保留一个全局数组。在主脚本中的某处执行此操作:

$config = array();
$config["output"] = "<html>.......</htmL>";
$config["user_language"] = "en";
.....

将配置数组导入到函数中,如下所示:

function output()
 { global $config;
   echo $config["output"];

注册表模式

如果你想做一些阅读,你可以使用更高级的东西,如注册表模式。显示的代码段here看起来是一个很好的注册表示例。 Zend Framework也有一个类。

但像注册表这样的东西真的非常先进,而且在这一点上可能不是必需的。我建议使用一个中央配置数组。如果需要更复杂的东西,配置数组很容易找到和替换。

  

背景:Are global variables in PHP considered bad practice?

答案 1 :(得分:5)

欢迎使用return和传递参数: 不要使用 global,它破坏了封装,这是面向对象编程的基石之一,并且可能导致难以维护的代码。

<?php

function doSomethingInDb(){
 $value = db_result(); //something from the database, this is psuedo code
 return $value
}

function displaySomethingFromDb($input){
 echo($input); //or some other way of displaying
}

//calulate results
$output = doSomethinginDb();

//do other stuff...

//output the result when you need it...
displaySomethingFromDb($output);

答案 2 :(得分:3)

您必须通过函数参数传递变量,或者在函数内部将其定义为全局变量。

$output = '<p>macilaci</p>';

function doesathing($output)
{
echo $output;
}

OR

function doesathing()
{
global $output;

echo $output;
}

答案 3 :(得分:1)

将数据放在检索它的函数内的变量中。

function retrieve(...)
{
    ... fetch from db
    return $rv;
}

function other() {...}
function still($data)
{
    ...
    echo $data;
}

$output = retrieve(...);
other();
still($output);

答案 4 :(得分:1)

不仅仅是将这个片段放入一个全局变量,恕我直言,更好的解决方案是使用模板系统来构建页面的元素。

NB我并不是建议你立即赶紧下载并开始下载Smarty - 虽然完全分离逻辑和演示文稿有好处和缺点,但采用模块化方法进行屏幕布局只会带来好处。

下进行。

答案 5 :(得分:0)

将以下行放在定义$output的函数的开头:

global $output;

在任何将使用它的函数的开头放置相同的行。

(如果在全局范围内已经有一个名为$output的变量,这将无效,或者会干扰其他变量。)

答案 6 :(得分:0)

使用会话

例如:

session_start();
$query = '...........';
$result = mysql_query($query);
$_SESSION['mysqlResult'] = $result;

现在您可以随时通过简单地调用

从任何页面使用它
$myresult = $_SESSION['mysqlResult'];