Мне нужно создать ок. 5-7 классов, каждый класс будет содержать много членов (скажем, каждый класс будет содержать 20 членов). Я мог бы создать их с помощью общедоступного доступа, например:
class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
Мой предпочтительный способ, конечно, сделать эти члены частными и создать методы get/set для каждого свойства. То есть.
class A {
private $myPropertyOne = '';
private $myPropertyTwo = '';
public function getMyPropertyOne() {
return $this->myPropertyOne;
}
public function setMyPropertyOne($myPropertyOne) {
$this->myPropertyOne = $myPropertyOne;
}
public function getMyPropertyTwo() {
return $this->myPropertyTwo;
}
public function setMyPropertyTwo($myPropertyTwo) {
$this->myPropertyTwo = $myPropertyTwo;
}
}
Но если у класса будет 20 свойств, у меня будет в дополнение к этому добавить 40 методов. И моя забота о том, как это замедлит script и гораздо больше памяти, это потребует (помните, что у меня будет несколько классов, подобных этому).
Другим решением может быть использование магических функций __set, __get, но я не хочу, потому что завершение кода в разработке IDE не будет предлагать свойства, которые имеют решающее значение для меня.
Если бы это был скомпилированный язык (например, С++), у меня не было бы вопроса и он использовал бы решение с помощью getters, seters, но поскольку PHP интерпретируется языком, я заинтересован в том, чтобы мои скрипты использовали меньше ОЗУ и были такими же быстрыми насколько это возможно.
Спасибо заранее, любые мысли по этому вопросу были бы высоко оценены!
Мое мнение
Спасибо всем за ваши ответы, я просто хотел поделиться своим мнением, если кто-то будет искать ответ на этот вопрос.
Я не могу полностью согласиться с теми, кто говорит, что вы не должны заботиться о производительности, поскольку это задача оптимизаторов, я думаю, что это важный фактор (по крайней мере, как и для меня), когда мы имеем дело с интерпретируемым языком, таким как PHP мы всегда будем думать о памяти и скорости (все это напоминает мне время, когда я разрабатывал системные приложения для DOS, хех:), и вы всегда были ограничены плохим процессором и килобайтами от общей ОЗУ, так что вы были счастливы, если бы могли сохранить дополнительный байт), в PHP-разработке у вас будет такое же изображение, как и независимо от того, сколько серверов вы добавите, количество пользователей будет всегда выше, так что вам всегда нужно решить, хотите ли вы следовать классическому/безопасному/правильному методу или избегайте этого и получаете некоторый выигрыш в скорости или памяти.
Итак, мое мнение заключается в том, что лучший способ здесь - использовать общедоступный доступ для всех участников и избегать getters/seters для всех свойств и использовать закрытый доступ с методами get/set для свойств, для которых требуется проверка или инициализация данных до значение будет установлено.
Например:
class B {
public $myPropertyOne = '';
public $myPropertyTwo = '';
private $myPropertyThree = array();
public function getMyPropertyThree() {
return $this->myPropertyThree;
}
public function setMyPropertyThree($val) {
if(!is_array($val)) {
return;
}
$this->myPropertyThree = $val;
}
}
Спасибо, что потратили время на мой вопрос!