J'essaie de comprendre ce code, et quand je suis arrivé à la dernière ligne, je ne l'ai pas compris. :(
Puis-je avoir votre aide pour savoir ce que signifie return $this
?
public function setOptions(array $options) {
$methods = get_class_methods($this);
foreach ($options as $key => $value) {
$method = 'set' . ucfirst($key);
if (in_array($method, $methods)) {
$this->$method($value);
}
}
//???? - return what ?
return $this;
}
Mettre à jour:
J'ai supprimé mes commentaires pour une meilleure clarification.
Cette façon de coder s'appelle interface fluide . return $this
renvoie l'objet actuel, vous pouvez donc écrire le code suivant:
$object
->function1()
->function2()
->function3()
;
au lieu de:
$object->function1();
$object->function2();
$object->function3();
Cela renverra l'instance sur laquelle cette méthode est appelée. Ceci est généralement fait pour obtenir des interfaces fluides afin que vous puissiez appeler des choses comme:
CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
Où setOptions
et sayHello
seraient appelés sur le même objet.
$this
désigne l'objet actuel, celui sur lequel la méthode est en cours d'exécution. En renvoyant $this
une référence à l'objet en cours de travail, la méthode est renvoyée à la fonction appelante.
Donc, quiconque fait
$foo2 = $foo->SetOptions($bar);
$ foo2 se réfère maintenant à $ foo également.
$ ce serait la classe qui contient cette fonction.
Donc, si vous appelez comme ça:
$obj->setOptions($options)
il retournera $ obj, qui a été défini avec les nouvelles options. Généralement, lorsque quelque chose est défini comme ceci, vous n'avez pas à capturer le retour, car cela affecte l'objet lui-même, mais cela permet de l'utiliser en ligne.
vous pouvez juste créer une chaîne de fonctions
class My_class
{
public function method1($param)
{
/*
* logic here
*/
return $this;
}
public function method2($param)
{
/*
* logic here
*/
return $this;
}
public function method3($param)
{
/*
* logic here
*/
return $this;
}
}
donc tu peux utiliser ça
My_class obj = new My_class();
$return = obj->method1($param)->method2($param)->method3($param);
Si la méthode SetOptions fait partie d'une classe ProgramOptions ou de quelque chose, $ ceci fera référence à la classe contenant la méthode, de sorte que vous renverriez une instance de ProgramOptions.
C’est une technique courante OOP appelée Interface courante . Son objectif principal est d’aider à chaîner plusieurs appels de méthodes dans des langages qui ne prennent pas en charge les méthodes en cascade, comme PHP. Alors
return $ this;
retournera une instance mise à jour (objet) de cette classe afin qu'elle puisse effectuer un autre appel dans sa portée. Voir exemple en PHP,
class Class_Name {
private field1;
private field2;
private field3;
public function setField1($value){
$this->field1 = $value;
return $this;
}
public function setField2($value){
$this->field2 = $value;
return $this;
}
public function setField3($value){
$this->field3 = $value;
return $this;
}
}
$object = new Class_Name();
$object->setField1($value1)->setField2($value2)->setField3($value3);