Вопрос

Я нахожусь в процессе переформатирования своего класса (см. ниже). Я думаю, что допустил ошибку, установив все с одинаковой видимостью в моем классе, тогда как свойства действительно должны быть частными, а геттеры/сеттеры в большинстве случаев должны быть общедоступными.

Чтобы получить свойство, я просто выполняю $path->propertyname, но заметил, что более практично иметь сеттеры/геттеры.Если бы мне пришлось реализовать геттеры, следует ли мне создавать по одному для каждого свойства или можно сделать по одному для всего класса?Например, я хочу получить имя контроллера...

public function getController( ) {
    return $this->controller;
}

И что бы вернуть контроллеру частную собственность?Часто ли используется более общий метод получения/установки или даже гибридный метод, который получает и наборы для меня?

Вот структура класса (только свойства/методы):

class urlParser {

    public static $url      = '';
    public static $controller   = '';
    public static $baseController = '';
    public static $urls     = '';
    public static $template     = '';
    public static $captures     = '';
    public static $contentXML   = '';

    function __construct( $urls ) {

        $this->urls = $urls;

        $this->baseController = $urls['default'];

        $this->get_url();
    }

    public function get_url() {
        // sets following properties:
        // url, template, controller, contentXML, baseController
    }
}
Это было полезно?

Решение

Наличие сеттеров и геттеров в вашем случае бессмысленно.

Если вам нужно сделать что-либо, кроме возврата контроллера, вам не нужен геттер, так как вам не нужен сеттер, если вы ничего не делаете со свойством после его установки.

Если вам действительно нужны геттеры и сеттеры, вы можете использовать магические методы __get и __set для всех ваших свойств.Но это совершенно бессмысленно, если дело обстоит так, как я описал выше.

Другие советы

взгляните на перегрузку в php: http://php.net/overload

есть два волшебных метода __get() и __set() который может сделать именно то, что вы хотите

PHP-объекты имеют некоторые приятные магические методы (хотя я не использую их все, потому что это может сбить с толку).Возможно, вы ищете __получать() и __набор().Вам все равно придется реорганизовать весь свой код, если вы решите сделать свои поля данных закрытыми (что вам следует сделать, чтобы у вас не было неправильного доступа к другим полям кода).Такой подход поможет сделать ваш код немного лучше и проще в сопровождении.

Хотя я обычно стараюсь иметь геттеры и сеттеры для каждого поля частных данных, потому что вы можете легко увидеть любую проверку для каждого поля.Плюс я больше разработчик Java, чем разработчик PHP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top