PHP ООП много сеттеров, геттеров

Мне нужно создать ок. 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;
    }
}

Спасибо, что уделили время моему вопросу!

12
задан user1476490 23 June 2012 в 08:52
поделиться