PHP $variable++ not working :(


PHP $variable++ not working :(

我有这个代码:

$arrayOfData = array("Data1", "Data2", "Data3", "Data4", "Data5", "Data6", "Data7", "Data8", "Data9");
var $dataCounter = 0;
var $setCounter = 1;
foreach($arrayOfData as $row => $value){
    $this->$dataCounter++;
    if($this->$dataCounter == 3){
      $this->$setCounter++;
      $this->$dataCounter = 0;
    }

}

当我回显$this->$setCounter时,我得到的只是0。我使用的是PHP 4,我的语法正确吗?我的foreach在类中的一个函数中。我的变量在类中。

由于这似乎不在类中,不,这是不正确的。$this->是不必要和不正确的,就像你对var的使用一样。

var $setCounter = 1;
// ...
$this->$setCounter++;

只需要:

$setCounter = 1;
// ...
$setCounter++;

这同样适用于$dataCounter

编辑

如果你正在使用一个类,那么你的

  1. 应该将var $dataCounter = 0; var $setCounter = 1;移到您的方法之外。

  2. $this->$setCounter++;更改为$this->setCounter++;

$foo->$bar是一个可变变量。您不是在处理foo对象的bar成员,而是在处理存储在单独的$bar变量中的任何值,该变量用于查找`$foo的成员。例如

# Set up object
$foo = new stdClass;
$foo->bar = 'bar';
$foo->foo = 'foo';
# Try to write to something in the object    
$x = 'bar';
$foo->$x = 'hello';  // note the $ on x
$foo->x = 'there';  // note the lack of $
var_dump($foo);
object(stdClass)#1 (3) {
  ["bar"]=>
  string(5) "hello"   // because of $foo->$x
  ["foo"]=>
  string(3) "foo"
  ["x"]=>
  string(5) "there"   // because of $foo->x
}

不需要像现在这样在PHP中使用关键字"var"。

我认为你需要回顾基本情况。查看以下链接以了解更多详细信息:http://www.php.net/manual/en/language.variables.basics.php

此外,您不需要->。仅当左侧部分是对象实例时才使用此选项。您可以使用它来访问实例成员或静态成员(但是,我建议::用于静态成员)。查看以下链接以了解更多详细信息:参考-这个符号在PHP中是什么意思?

就代码而言,删除"箭头"answers"变量"。您正在回显0,因为您已将"var$dataCounter"初始化为0。

    $arrayOfData = array("Data1", "Data2", "Data3", "Data4", "Data5", "Data6", "Data7", "Data8", "Data9");
    $dataCounter = 0;
    $setCounter = 1;
    foreach($arrayOfData as $row => $value){
           $dataCounter++;
           if($dataCounter == 3) {
                $setCounter++;
                $dataCounter = 0;
           }
   }

从那里开始,然后继续。此外,对于你正在做的事情,前臂是不必要的。相反:

    $arrayOfData = array("Data1", "Data2", "Data3", "Data4", "Data5", "Data6", "Data7", "Data8", "Data9");
    $setCounter = (sizeOf($arrayOfData))%3; //counts sets of 3