PHP:创建一个" STATIC GLOBAL"在调用中保留其值的变量

时间:2018-01-14 16:02:27

标签: php static global-variables

我想编写一个可以这样工作的网页:

  • 从用户输入一个号码
  • 使用该号码显示一些信息,
  • 为用户提供使用该号码和信息的选项,
  • 如果有此要求,请使用按照指示​​提供的号码和信息。

我在最后一步遇到问题 - 在用户选择使用该号码的选项后,号码消失了 - 它已不再设置。我尝试将数字设为 static ,这就是我在PHP以外的语言中执行此操作的方法。我也尝试过一种名为$ GLOBALS的数组,但这没有帮助。

以下是说明问题的源代码。

在PHP中必须有一种标准或原型的方式来处理这种交互,但我并不认为它。任何建议或更正将不胜感激!

<h2>Give Me a Number</h2>

<form method="post">
    <label for="MyNumber">Number Please</label>
    <input type="text" id="MyNumber" name="MyNumber">
    <input type="submit" name="view" value="View Number">
</form>

<?php

static $MyNumber;

if (isset($_POST['view'])) 
{

    try 
    {

        // Get the Number from the post variable for binding
        $MyNumber = $_POST['MyNumber'];

        echo "Your Number is ", $MyNumber, " on Line 24";
        echo "<br>", "Your GLOBAL Number is ", $GLOBALS['MyNumber'], " on Line 25";

    }

    catch(PDOException $error) 
    {
        echo $sql . "<br>" . $error->getMessage();
    }
}

if (isset($_POST['view'])) 
{
    if ($MyNumber > 0 ) 
    { ?>
        <h2>Again, Your Number is <?php echo $MyNumber, " on Line 40"; ?> </h2> 
        <h2>Again, Your Number is <?php echo $GLOBALS['MyNumber'], " on Line 41"; ?> </h2> 


        <table>
            <thead>
                <tr>
                    <th>My Number</th>
                    <th>Global Number</th>
                </tr>
            </thead>
            <tbody>
    <?php 
        for ($i = 1; $i <= $MyNumber; $i++)
        { ?>
            <tr>
                <td><?php echo $MyNumber; ?></td>
                <td><?php echo $GLOBALS['MyNumber']; ?></td>
            </tr>
        <?php 
        } ?>
        </tbody>
    </table>

    <?php 
    } 
    else 
    { ?>
        <blockquote>No NUMBER !!!! on Line 68</blockquote>
    <?php
    } ?> 

    <form method="post">
        <input type="submit" name="use" value="Use My Number">
    </form>

<?php }?> 

<?php
//////////////// USE the NUMBER //////////////////
if (isset($_POST['use'])) 
{
    if (isset($MyNumber) )
    {
        echo "I can USE (", $MyNumber, ") My Number !!!"; 
        echo "<br>", "and(", $GLOBALS['MyNumber'], ") My GLOBAL Number!"; 
    }
    else
    {

        echo "Hey, what happened to (", $MyNumber, ")? I wanted to use it!"; 
        echo "<br>", "Hey, GLOBAL (", $GLOBALS['MyNumber'], ") is gone also!"; 

    }
}

?>

1 个答案:

答案 0 :(得分:1)

您不应该在PHP中使用全局变量。这被认为是不好的做法。

您应该做的是使用“使用我的号码”在表单中创建一个隐藏的输入。这样您就可以将您的号码传递到下一篇文章。

<form method="post">
    <input type="hidden" name="MyNumber" value="$_POST['MyNumber']">
    <input type="submit" name="use" value="Use My Number">
</form>

在多个请求上存储数据的另一种方法是使用会话。

在通行证顶部设置 session_start(); 以激活会话。 然后,您可以将您的号码存储到 $ _ SESSION [&#39; MyNumber&#39;] 中。然后,此变量将持久存储在多个页面请求中。可以找到更多信息here