Appel de méthode immédiatement après la création d'un objet en POO en PHP
Supposons que nous ayons une classe Arr qui
stocke un tableau de nombres et peut calculer
la somme de ces nombres à l'aide de la méthode getSum.
Les nombres eux-mêmes sont passés sous forme de tableau au constructeur
de l'objet, et peuvent également être ajoutés un par un
à l'aide de la méthode add :
<?php
class Arr
{
private $numbers = [];
public function __construct($numbers)
{
$this->numbers = $numbers;
}
public function add($number)
{
$this->numbers[] = $number;
}
public function getSum()
{
return array_sum($this->numbers);
}
}
?>
Voici un exemple d'utilisation de la classe Arr :
<?php
$arr = new Arr([1, 2, 3]);
$arr->add(4);
$arr->add(5);
echo $arr->getSum(); // affichera 15
?>
Il peut arriver que nous passions tous les nombres nécessaires au moment de la création de l'objet, puis que nous souhaitions immédiatement trouver leur somme :
<?php
$arr = new Arr([1, 2, 3]);
echo $arr->getSum(); // affichera 6
?>
Si nous ne prévoyons plus de faire de
manipulations avec l'objet, le code ci-dessus peut
être réécrit plus brièvement : on peut créer l'objet et
immédiatement appeler sa méthode getSum :
<?php
echo (new Arr([1, 2, 3]))->getSum(); // affichera 6
?>
<?php
class StringProcessor
{
private $str = '';
public function __construct($text)
{
$this->str = $text;
}
public function append($text)
{
$this->str .= $text;
return $this;
}
public function getValue()
{
return $this->str;
}
public function getLength()
{
return strlen($this->str);
}
}
?>
Supposons que ce code ait été utilisé de la manière suivante :
<?php
$str = new Str('aaa');
$str->append('bbb');
$str->append('ccc');
echo $str->getLength();
?>
Réécrivez ce code en utilisant l'appel de la classe sur place.