PHP защищенные классы и свойства, защищенные от кого? - PullRequest
8 голосов
/ 10 января 2011

Я только начинаю работать с ООП PHP с PHP-объектно-ориентированными решениями Дэвида Пауэрса, и мне немного любопытно понятие защиты в ООП.

Автор явнообъясняет, как работает защита, но немного не желает, чтобы другие могли изменять свойства, не совсем понятно.Я с трудом представляю себе ситуацию, в которой когда-либо можно помешать другим изменять ваши классы, поскольку они могут просто открыть ваш class.php и вручную настроить то, что им нравится, как PHP всегда отображается в виде простого текста.

Внимание: все вышеперечисленное написано новичком с пониманием программирования новичком.

Ответы [ 3 ]

17 голосов
/ 10 января 2011

От себя!

Вы используете различные уровни защиты, чтобы указать, как вы хотите использовать класс.Если член класса protected или private, доступ к нему может получить только сам класс.Нет никакого шанса, что вы можете случайно напортачить значение этого члена из «внешнего» кода (кода вне класса).

Скажем, у вас есть член класса, который должен содержать только цифры.Вы делаете его protected и добавляете установщик, который проверяет, что его значение может быть только числовым:

class Foo {

    protected $num = 0;

    public function setNum($num) {
        if (!is_int($num)) {
            throw new Exception('Not a number!!!');
        }
        $this->num = $num;
    }
}

Теперь вы можете быть уверены, что Foo::$num всегда будет содержать число, когда вы хотите работать с ним,Вы можете пропустить множество дополнительных кодов проверки ошибок, когда захотите их использовать.Каждый раз, когда вы пытаетесь присвоить ему что-либо, кроме номера, вы получите очень громкое сообщение об ошибке, которое позволяет очень легко находить ошибки.

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

По своей природе программное обеспечение очень мягкое и легко разлагается в неуправляемую логическую машину Рубе Голдберга.ООП, инкапсуляция, модификаторы видимости, подсказка типа и т. Д. - это инструменты, которые PHP дает вам для того, чтобы сделать ваш код "сложнее", выразить ваше намерение о том, что вы хотите, чтобы определенные части кода были, и включить PHP для обеспечения этогонамерение для вас.

6 голосов
/ 10 января 2011

Защищено, на самом деле не защищает от изменения исходного кода кем-либо, а представляет собой видимость метода класса в PHP OOP

Члены класса, объявленные публичными, доступны везде. Члены, объявленные защищенными, могут быть доступны только внутри самого класса и унаследованных и родительских классов. Члены, объявленные как закрытые, могут быть доступны только классу, который определяет член.

2 голосов
/ 10 января 2011

Они означают, что защищены разными способами ...

  • Закрытые переменные не видны нигде, кроме как внутри класса.
  • Защищенные переменные не видимы для экземпляра объекта, но видимы для классов, которые наследуются от этого класса, а также самого класса.

Ничто не мешает другому программисту открыть файл класса и изменить модификаторы доступа.

Сокрытие данных - это хорошая вещь, потому что чем меньше вы выставляете, тем больше вы можете контролировать и меньше ошибок, которые вы потенциально можете внести.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...