Votre API déjà définie et vous êtes coincé avec des méthodes GetX et setX? Je préfère de beaucoup les propriétés. Moins de typage, une meilleure distinction entre les propriétés et les méthodes, et le code résultant ressemble plus à PHP et moins à Java. Mais exposer les propriétés ne signifie pas que vous perdez l'encapsulation et que tous vos internals deviennent publics. Avec les méthodes magiques __get et __set, vous pouvez avoir un contrôle très précis sur ce que vous présentez. De plus, il serait plutôt trivial pour vider les propriétés comme un tableau:
class Foo
{
protected $properties;
public function __construct() {
$this->properties = array();
}
public function __set($prop, $value) {
$this->properties[$prop] = $value;
}
public function __get($prop) {
return $this->properties[$prop];
}
public function toArray() {
return $this->properties;
}
}
Hélas, si vous êtes coincé avec setters/getters à cause d'un patron de mauvaise humeur ou une mauvaise compréhension de ce POO doit être, pourquoi pas simplement cast l'objet à un tableau?
class Bar
{
public $x;
public $y;
public $z;
protected $a;
protected $b;
protected $c;
private $q;
private $r;
private $s;
public function __construct() {
}
public function setA($value) {
$this->a = $value;
}
public function getA() {
return $this->a;
}
public function setB($value) {
$this->b = $value;
}
public function getB() {
return $this->b;
}
public function setC($value) {
$this->c = $value;
}
public function getC() {
return $this->c;
}
public function toArray() {
return (array)$this;
}
}
Remarquez comment public protégé, et les propriétés privées sont exprimés:
$bar = new Bar();
print_r($bar->toArray());
array(9) {
["x"]=>
NULL
["y"]=>
NULL
["z"]=>
NULL
[" * a"]=>
NULL
[" * b"]=>
NULL
[" * c"]=>
NULL
[" Foo q"]=>
NULL
[" Foo r"]=>
NULL
[" Foo s"]=>
NULL
}
Notez que les clés du tableau de/privé protégées ne commencent pas par un espace, il est une valeur nulle. Vous pouvez les retaper ou même filtrer les propriétés protégées/privé si vous aimez:
public function toArray() {
$props = array();
foreach ((array)$this as $key => $value) {
if ($key[0] != "\0") {
$props[$key] = $value;
}
}
return $props;
}
Vous travaillez avec un langage dynamique; profitez-en et profitez-en!
posez-vous des questions sur une classe intégrée, un code de bibliothèque ou le vôtre? – Kris