J'ai une classe PHP qui stocke un tableau multidimensionnel complexe, et plutôt que d'écrire des méthodes d'accès individuelles en tant qu'interface à ce tableau, j'ai décidé d'utiliser la méthode __get de PHP5. Lorsque j'ai commencé à écrire ces accesseurs magiques, je me suis rendu compte que je n'avais aucune idée des meilleures pratiques ici, alors j'ai pensé que je demanderais. Est-ce qu'une grande structure if/else à l'intérieur de __get() est commune?PHP __get() bonne pratique
J'ai inclus un petit extrait de la classe de référence:
<?php
class Project {
private $data;
public function __construct($d) {
$this->data = $d;
}
public function __get($val) {
if ($val === 'title')
return $this->data['info']['projectName'];
else if ($val === 'id')
return $this->data['info']['projectID'];
else if ($val == 'health') {
switch($this->data['info']['health']) {
case 'OT':
case 'NS':
case 'LR':
return 'Low Risk—Healthy';
break;
case 'CR':
return 'Critical Risk—Action Needed';
break;
default:
return 'Unknown';
}
}
}
}
?>
Je suis juste accéder aux données comme:
$o = new Project($array);
echo $o->title; #etc
Cela ressemble à un cauchemar à maintenir par la suite, sans parler de l'extension du monstre. – aefxx
Ne pas speek if-else déclaration dans les méthodes __get(). Je dirai que vous devriez éviter d'utiliser l'instruction else-if autant que possible partout dans le monde. – caoglish