【问题标题】:Make variables available inside of a function.(PHP)使变量在函数内部可用。(PHP)
【发布时间】:2014-01-05 09:13:36
【问题描述】:

我正在构建一个应用程序来跟踪有关我们处理的客户的某些信息,例如姓名/日期/工作时间/电话号码等。这些信息存储在数据库中。因为我们有不同的部门,如 SEO/WEB/销售等,以及这些团队中的不同人员,该应用程序提供了不同的方式来过滤信息,具体取决于按下的过滤器按钮。

当有人按下“过滤器按钮”时,在本例中,假设他们按下了“按部门查看”按钮,它会将他们带到实际的硬编码页面。 举个例子:

viewSeoAccs.php

viewWebAccs.php

ViewSalesAccs.php

在这些页面中,我有查询根据按下的过滤器提取信息,但 html 是相同的。现在问题来了。

我有许多不同的页面(基于过滤器),每次对 html 进行编辑时,我都必须进入每个 PHP 页面来实施更改。

我想做的是创建一个为我吐出 html 的函数。我已经完成了大约一半,我知道问题所在,但似乎找不到解决方案。

这是一些代码。

在我的functions.php 文件中,我有一个名为“htmlBlockTEST”的函数,其中包含此代码。

   EXAMPLE: (code chopped for easy reading)
    <?php
        function htmlBlockTEST(){

                echo '' ?>


    <h2 class="accName fl"><?php echo $row['company_name']; ?></h2>
    <div class="<?php echo $row['acc_risk']; ?>"> Risk Level. </div>


    //ALOT MORE CODE goes here lol.

    <?php
        }
    ?>

这是在标题中并通过“include_once('functions.php') 购买的。 在此之下,我有特定的变量可以提取查询的数据。 (下例)

$pullAllAccounts = "SELECT * FROM tlm_accounts ORDER BY company_name ASC;";
$pullAllAccountsDoIt = mysqli_query($c2d, $pullAllAccounts) or die ("could not pull WEB team data" . mysqli_error($c2d));
?>

现在我遍历数据库并显示如下信息:

<?php

while($row = mysqli_fetch_array($pullAllAccountsDoIt)){
$compName = $row['company_name'];


?>


<?php htmlBlockTEST(); ?>

<?php 

    }

?>

在上面的这段代码中,函数调用“htmlBlockTEST”所在的位置就是问题所在。由于保存查询的变量在函数之外,我假设它们没有被传递到函数中。我不想将它们放在函数中,因为 HTML 在所有页面中都是相同的,但不是所有数据。

我需要包含 $row['company_name'] 的变量在函数内部也可用,这样它就不会引发“未定义变量”错误。

我怎样才能做到这一点?让while循环(或其他)中的这些变量在函数内部可用的最佳方法是什么?

PS,我在谷歌上找到了诸如 $GLOBALS['x'] 之类的东西,但从我读到的内容来看,这不是最好的方法或更容易,而且我对如何使用它感到困惑。

非常感谢任何帮助。 提前致谢。

【问题讨论】:

  • 作为参数可能吗? htmlBlockTEST($compName);
  • 是的,我也试过了,但没用。
  • 正如 Reza 所说,htmlBlockTEST() 也需要在 while 循环中:) 其他选项在反应式编程领域;)

标签: php function variables


【解决方案1】:

选项 1:

while($row = mysqli_fetch_array($pullAllAccountsDoIt)){
    htmlBlockTEST($row);
}

选项 2:

global $row;
while($row = mysqli_fetch_array($pullAllAccountsDoIt)){
    $compName = $row['company_name'];
    htmlBlockTEST();
}

//and in your htmlBlockTEST() function just right this:
function htmlBlockTEST(){
    global $row; ?>
    <h2 class="accName fl"><?php echo $row['company_name']; ?></h2>
    <div class="<?php echo $row['acc_risk']; ?>"> Risk Level. </div>

    <?php
    //ALOT MORE CODE goes here lol.
}
?>

当然,你还有更多选择。

【讨论】:

  • 第三个选项可能是将所有结果提供给 htmlBlockTEST($all);
  • 你好礼萨。简而言之,它奏效了。我不得不做一些小的改变,但总的来说它是有效的。当我仅在函数外部将“全局”添加到“$row”时,它不起作用,我将其删除并将其放在函数内部,现在一切正常。我不明白的是如何或为什么。我可以理解它在函数之外作为全局工作,但在函数内部?....我迷路了。你能帮我理解吗?谢谢。
  • 你可以看到我在上面两个地方写了global $row;。仅当它不在任何函数内部时,才不需要 while 循环上方的第一个;但是你可以在这里声明全局没有问题。现在第二个是必须的,因为有必要让系统知道它是/可能在这个函数之外定义的,你可以使用它;但是如果你改变这个内部变量的值,它也会改变/更新整个系统;所以,简而言之,第一个是可选/补充取决于它的声明位置,但第二个是必须的。
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多