函数不保存变量

时间:2018-03-27 17:16:01

标签: php function

我每次调用函数时都试图将数字加1,但由于某种原因,总数总是相同的。

这是我目前的代码:

 <?php
 $total;

 function draw_card() {          
     global $total;               
     $total=$total+1;            
     echo $total;
 }

 draw_card(); 
 draw_card(); 
 ?>

3 个答案:

答案 0 :(得分:1)

就个人而言,我不会使用全局变量,但如果我在枪口下被强制执行,我将处理函数中的状态,因此外部变量不会污染该值。我还会制作一个任意的长键名,我不会在其他地方使用。

<?php
function draw_card($initial = 0) {
    $GLOBALS['draw_card_total'] = (
        isset($GLOBALS['draw_card_total']) ? $GLOBALS['draw_card_total']+1 : $initial
    );
    return $GLOBALS['draw_card_total'];        
}

// optionally set your start value
echo draw_card(1); // 1
echo draw_card();  // 2

https://3v4l.org/pinSi

但是我更倾向于选择一个默认保持状态的类,加上它更详细的发生。

<?php
class cards {
    public $total = 0;

    public function __construct($initial = 0)
    {
        $this->total = $initial;
    }

    public function draw()
    {
        return ++$this->total;
    }

    public function getTotal()
    {
        return $this->total;
    }
}

$cards = new cards();

echo $cards->draw(); // 1

echo $cards->draw(); // 2

echo $cards->getTotal(); // 2

https://3v4l.org/lfbcL

答案 1 :(得分:0)

由于它已经是全局的,你可以在函数之外使用它。

<?php


    $total;

    function draw_card() {
    global $total;
    $total=$total+1;
    //echo $total;
    }

    draw_card();
    draw_card();
    draw_card();

    echo "Current Count :", $total;

    ?>

结果: 当前数量:3

这将增加调用该函数的次数。 由于您每次都没有分隔符回显结果/总计,您可能认为输出为12(假设)

答案 2 :(得分:-1)

函数有一个范围..你只需要将$ total带入函数的范围内......最好不要全局但作为参数。

$total = 0;
function draw_card($total) {
return $total + 1;
}
$total = draw_card($total);
//Expected Output = 1
$total = draw_card($total);
//Expected Output = 2