我有一个函数可以从数据库中检索一些数据,将其格式化为HTML,然后将此HTML存储到变量$output
中。问题是,$output
现在无法在其他功能运行之后在屏幕上回显。此数据也必须在此阶段检索,而不是在以后检索。
那么在输出到屏幕后,如何在另一个函数中调用此$output
变量?
答案 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也有一个类。
但像注册表这样的东西真的非常先进,而且在这一点上可能不是必需的。我建议使用一个中央配置数组。如果需要更复杂的东西,配置数组很容易找到和替换。
答案 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'];