Мне нужно создать ок. 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, но я не хочу этого делать, потому что автозавершение кода в 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;
}
}
Спасибо, что уделили время моему вопросу!