Мне нужно создать ок. 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 методов. И меня беспокоит то, как это замедлит работу скрипта и потребует гораздо больше памяти (помните, у меня будет несколько таких классов).
Другим решением может быть использование магических функций __set, __get, но я не хочу этого делать, потому что автозавершение кода в среде разработки не предложит свойства, которые для меня важны.
Если бы это был скомпилированный язык (например, C++), у меня не было бы вопросов, и я бы использовал решение с геттерами, сеттерами, но, поскольку PHP является интерпретируемым языком, я заинтересован в том, чтобы мои скрипты использовали меньше оперативной памяти и были как можно быстрее.
Заранее спасибо, будем очень признательны за любые мысли по этому вопросу!
Мое мнение
Спасибо всем за ответы, я просто хотел поделиться своим мнением на случай, если кто-то будет искать ответ на этот вопрос.
Я не могу полностью согласиться с теми, кто говорит, что вы не должны заботиться о производительности, так как это задача оптимизаторов, я думаю, что это важный фактор (ну, по крайней мере, для меня), когда мы имеем дело с интерпретируемым языком, таким как PHP, мы всегда будем нужно думать о памяти и скорости (все это напоминает мне время, когда я разрабатывал системные приложения для DOS, хех :), и вы всегда были ограничены слабым процессором и килобайтами общей оперативной памяти, поэтому вы были счастливы, если вы могли сэкономить дополнительный byte), при разработке 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;
}
}
Спасибо, что уделили время моему вопросу!