Мне нужно создать прибл. 5-7 классов, каждый класс будет содержать много членов (скажем, каждый класс будет содержать 20 членов). Я мог бы создать их с помощью открытого доступа, например:PHP OOP много сеттеров, геттеров
class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
Мой предпочтительный способ, конечно, чтобы сделать эти члены приватным и создать получить/установить методы для каждого свойства. То есть
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 методов. И моя забота здесь о том, как это замедлит сценарий и гораздо больше памяти, это потребует (помните, что у меня будет несколько классов, подобных этому).
Другим решением может быть использование магических функций __set, __get, но я не хочу, потому что завершение кода в разработке IDE не будет предлагать свойства, которые имеют решающее значение для меня.
Если бы это был скомпилированный язык (например, C++), у меня не было бы вопроса и он использовал бы решение с геттерами, сеттерами, но так как PHP интерпретируется языком, то я заинтересован в том, чтобы мои скрипты использовали меньше ОЗУ и были такими же как можно быстрее.
Заранее спасибо, любые мысли по этому вопросу были бы высоко оценены!
Мое мнение
Спасибо всем за ваши ответы, я просто хотел высказать свое мнение в случае, если кто-то будет искать ответ на этот вопрос.
Я не могу полностью согласиться с теми, кто говорит, что вам не следует заботиться о производительности, поскольку это задача оптимизаторов, я думаю, что это важный фактор (как бы это ни было для меня), когда мы имеем дело с интерпретируемым языком, таким как PHP мы всегда будем думать о памяти и скорости (все это напоминает мне время, когда я разрабатывал системные приложения для DOS, хех :), и вы всегда были ограничены плохим процессором и килобайтами от общей памяти, поэтому вы получили удовольствие, если вы мог бы сохранить дополнительный байт), в PHP-разработке у вас будет одинаковое изображение, независимо от того, сколько серверов вы добавите, количество пользователей будет всегда выше, так что вам всегда нужно решить, хотите ли вы следовать классическому/безопасному/правильному методу или чтобы избежать этого и получить некоторый выигрыш в скорости или памяти.
Итак, я считаю, что лучший способ здесь - использовать общедоступный доступ для всех участников и избегать геттеров/сеттеров для всех свойств и использовать закрытый доступ с методами 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;
}
}
Спасибо за тратить время на мой вопрос!
это микро-оптимизация, и вы не должны беспокоиться об этом. –
Ну, да, но перспектива добавить 280 методы (для 7 классов, 20 частных членов) только для этого немного пугает меня с точки зрения памяти/скорости. И, скажем, система растет, и я продлю эти классы на счет 15 .. тогда я получу 600 методов. с другой стороны, я понимаю, что эти методы get/set будут выполняться только при необходимости, но в то же время я предполагаю, что когда PHP будет анализировать исходный код, он будет строить таблицу методов в памяти, будет выполнять анализ синтаксиса, и все это может медленное замедление работы скрипта, правильно ли мое предположение? – user1476490
Память относительно дешевая, а служебные данные метода - только для каждого класса (не для каждого экземпляра). PHP также выполняет трюки, такие как обработка нескольких запросов в одном и том же процессе (через mod_php и т. д.), поэтому начальное время загрузки (как ничтожно, как может быть) может быть полностью проигнорировано ... во всяком случае, * первым шагом * (в реальных условиях), чтобы увидеть, что такое «медленные» части системы. (FWIW, предположим, что существует 600 методов, и каждый метод «отходы» 1kb.Большой 600kb «потерян». На самом деле это не так много в схеме вещей ... особенно учитывая, насколько * каждая переменная * на PHP уже " отходы ";-) –