Rolf B: php-Versuchsaufbau schlägt fehl

Beitrag lesen

Hallo Gregor,

für die Klasse ein Beispiel:

class Accumulator {
   private $values;

   function __construct() {
      $this->values = [];
   }

   function addAt($index, $betrag) {
      $this->values[$index] = ($this->values[$index] ?? 0) + $betrag;
   }

   function getAt($index) {
      return $this->values[$index] ?? 0;
   }
}

for ($id=1; $id<=5; $id++) {
   $accu = new Accumulator();   // Neuer Akkumulator für neue ID
   for ($i=0; $i<11; $i++) {
      $accu->addAt($i, $i);
   }
   print_r($accu);              // Testausgabe nach der Schleife
}

Dieses ?? in Zeile 13 und 17 ist der "null coalescing operator". Der Ausdruck $a ?? $b gibt $a zurück, wenn $a ein existierender Wert und nicht NULL ist. Andernfalls wird $b zurückgegeben - das ist bei $a==NULL der Fall und auch beim Zugriff auf ein uninitialisiertes Array-Element. Dadurch wird eine "Undefined offset" Notice beim ersten Verwenden eines Index vermieden, aus meiner Sicht ist PHP Code, der beim Ausführen eine Notice oder gar eine Warning auslöst, schludrig bis fehlerhaft.

Die reset-Methode habe ich jetzt gar nicht programmiert. Es dürfte zumeist sinnvoller sein, den alten Akkumulator wegzuwerfen und einen neuen zu erzeugen, statt einen bestehenden zu Resetten.

Rolf

--
sumpsi - posui - obstruxi