1

在这里使用 PHP,我决定逐章阅读手册并学习新东西。所以现在我发现了静态变量,这似乎是一个很棒的概念,但我理解它的方式是:

每次加载脚本时,静态变量设置一次且仅设置一次。它们可以更改和增加,但实际上不能重新设置。通常在函数中用于设置一个值,而不必在每次函数运行时初始化该变量。

<?php

function count2( $inputNum ) {
    static $a = $inputNum;
    echo $a++; //Echo and then increment.
}

for ( $i = 0; $i < 10; $i++ ) {
    count2(50);
}

?>

我希望这会$a在 50 处启动静态 var,并增加 11 倍。我怎么会出错?

4

3 回答 3

4

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

我认为您错过了文档中的那部分(强调我的):)

于 2012-05-31T01:23:32.700 回答
1

静态变量不能用另一个变量初始化,其值直到运行时才知道。您必须使用编译时已知的值对其进行初始化。

function count2($inputNum) {
  // Initialize only once to an integer (non variable, non-expression)
  static $a = 0;
  if ($a === 0) {
    // If $a is still 0, set it to $inputNum
    $a = $inputNum;
  }
  echo $a++;
}

// First run outputs 25
count2(25);
// 25
// Subsequent runs increment
count2(25);
// 26
count2(25);
// 27

相关文件...

于 2012-05-31T01:24:20.623 回答
0

几个问题:

  • 您只能声明一次静态变量。count2()您的语法通过调用10 次一遍又一遍地破坏它。
  • 您不能使用++运算符,因为您不能更改静态变量
  • 不使用定义和constant

也许尝试类似:

<?php
error_reporting(E_ALL);

/* setup */

function set( $input ) {
    define( 'A', $input );
}
function tick() {
    echo constant( 'A' ) . "\n";
}

/* run */

set( 50 );
for($i=0; $i<10; $i++){
    tick();
}

?>

这将输出:

$ php test.php 
50
50
50
50
50
50
50
50
50
50
于 2012-05-31T01:25:01.690 回答