уже определен ваш API и вы застряли с GetX и Setx методами? Я предпочитаю свойства. Меньшая типизация, лучшее различие между свойствами и методами и полученный код больше похожи на PHP и меньше похожи на Java. Но разоблачение свойств не означает, что вы теряете инкапсуляцию и делаете все свои внутренности общедоступными. С помощью методов __get и __set magic вы можете иметь довольно тонкий контроль над тем, что вы представляете. Кроме того, было бы довольно тривиально сбросить свойства как массив:
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;
}
}
Увы, если вы застряли с сеттеры/добытчиками из-за причудами босса или некоторого непонимания того, что ООП должно быть, почему не просто бросать объект в массив?
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;
}
}
Обратите внимание, как общественности, защищенные и частные свойства отлиты:
$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
}
Обратите внимание, что ключи массива для защищенного/частного не начинаться с пробела, это нуль. Вы можете повторно ввести их, или даже отфильтровать защищенные/частные свойства, если вам нравится:
public function toArray() {
$props = array();
foreach ((array)$this as $key => $value) {
if ($key[0] != "\0") {
$props[$key] = $value;
}
}
return $props;
}
Вы работаете с динамическим языком; воспользуйтесь этим и наслаждайтесь!
Вы спрашиваете о встроенном классе, библиотечном коде или вашем собственном? – Kris