Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有人能帮我清除静态变量吗?_Php_Variables_Static - Fatal编程技术网

Php 有人能帮我清除静态变量吗?

Php 有人能帮我清除静态变量吗?,php,variables,static,Php,Variables,Static,在这里使用PHP,我决定一章一章地阅读手册,学习新知识。现在我发现了静态变量,这似乎是一个很棒的概念,但我对它的理解是: 静态变量在每次加载脚本时只设置一次。它们可以更改和递增,但实际上不能重新设置。通常在函数中用于设置值,而不必在每次函数运行时初始化该变量 <?php function count2( $inputNum ) { static $a = $inputNum; echo $a++; //Echo and then increment. } for ( $

在这里使用PHP,我决定一章一章地阅读手册,学习新知识。现在我发现了静态变量,这似乎是一个很棒的概念,但我对它的理解是:

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

<?php

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

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

?>

我希望这将在50开始静态
$a
var,并增加11倍。我怎么会出错

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

我想你错过了(强调我的):)

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


我想你错过了(强调我的):

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

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

静态变量不能用另一个变量初始化,该变量的值在运行时之前是未知的。必须使用编译时已知的值初始化它

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

一些即时的问题:

  • 只能声明一次静态变量。通过调用
    count2()
    10次,您的语法会一次又一次地对其进行重击
  • 您不能使用
    ++
    运算符,因为您不能更改静态变量
  • 不使用定义和
或许可以尝试以下方式:

<?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();
}

?>

一些即时的问题:

  • 只能声明一次静态变量。通过调用
    count2()
    10次,您的语法会一次又一次地对其进行重击
  • 您不能使用
    ++
    运算符,因为您不能更改静态变量
  • 不使用定义和
或许可以尝试以下方式:

<?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();
}

?>

在这个例子中,我是根据他们所做的文档(增量)得出的。如果我用numberHmmm初始化静态var,它也可以工作,我测试过,这可以工作:
$php-r'static$a=3$a++;回声$a;'在这个例子中,我是根据他们所做的文档(增量)得出的。如果我用numberHmmm初始化静态var,它也可以工作,我测试过,这可以工作:
$php-r'static$a=3$a++;回声$a;'static$a=0
不会使用effect@user1159454是的,没错。
静态
初始化只会发生一次,函数将在后续调用中保留该值。
$a++
会增加它(返回并回显后)。嘿,谢谢,让我看看我是否做对了。您将static设置为一个伪值(0),只是为了告诉它是静态的,然后当您将其更改为参数时,它仍然保持静态,因此不会重新初始化自身?@user1159454是的,它保持它,下次调用函数时,该行将
static$a=0
不会使用effect@user1159454是的,没错。
静态
初始化只会发生一次,函数将在后续调用中保留该值。
$a++
增加了它(返回并回显后)。啊,是的,我确实错过了。那本手册对我来说很难,它一直在谈论它可能期望我已经知道的概念,然后在3页之后介绍这个概念..谢谢!啊,是的,我确实错过了。那本手册对我来说很难,它一直在谈论它可能期望我已经知道的概念,然后在3页之后介绍这个概念..谢谢!