Что такое инкапсуляция с простым примером в php? Доступ и настройка параметров класса

1

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

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

Теперь может быть другая ситуация, с которой мне, возможно, придется обращаться, используя PHP, позвольте мне принять во внимание два сценария, в которых у меня есть две сделки в зависимости от ситуации.

СИТУАЦИЯ A:

Клиенты A хочет, чтобы разработать Web приложение, которое будет храниться локально в своем настольном компьютере и доступ оттуда. в контексте в этой ситуации я ничего не могу сделать до, чтобы никто не касался источника. Инкапсуляция данных не имеет значения здесь я вижу. не так ли?

Ситуация B:

Мне нужно разработать веб-приложение, который будет размещен в сервере и доступе оттуда, и у меня есть определено несколько класса, который ограничен герметизация, но я хочу, чтобы другие разработчиков расширили класс на, используя Public API. я действительно делаю не имею никакой идеи о том, как я могу позволить кому-либо (разработчикам) продлить использование моего класса в этой ситуации? я действительно не уверен, как публичные вещи API work ?? Я буду признателен, если бы кто-то мог пролить свет на логику за внедрение PUBLIC API. и это это, где Data Encapsulation приходит в изображение? это единственная ситуация, где мне будет нужно инкапсуляция, которая будет реализована в моем приложении?

  • 2 ответа
  • Сортировка:

    Активность

2

Вы не используете Encapsulation, потому что это не позволяет людям касаться вашего кода, а потому, что вы хотите создать ограниченный, но выделенный публичный API для ваших объектов для обмена сообщениями. Это ключевой элемент в парадигме ООП. Цель заключается не в безопасности, а в поддерживаемых и гибких приложениях. Если люди хотят изменить свой код, позвольте им. Они взрослые.

0

Да, я могу их разрешить, но что, если я реализую сайт электронной коммерции, который обрабатывает различные типы платежных систем. я все еще прошу других разработчиков прийти изменить мой исходный код? и главный вопрос заключается в том, могут ли люди получить доступ к моему исходному коду, который размещен на удаленном сервере, и может ли он их изменить, даже если у файла есть 777 разрешений? - Ibrahim Azhar Armar 14 июн. 11 2011-06-14 11:38:12

0

@Ibrahim Разрешения для файлов не имеют ничего общего с концепцией инкапсуляции. 777 доступен для всего мира. Пожар вашего SysAdmin, если он/она установил какие-либо разрешения на это. Но он полностью не связан с инкапсуляцией или разработкой программного обеспечения. -

Эти концепции встречаются, когда вы публикуете закрытую исходную библиотеку. Вы хотите убедиться, что он имеет открытый публичный API, предоставляемый в качестве интерфейса, и вы хотите убедиться, что он зашифрован, поэтому никто не может копировать его внутренности.

_user == null) { $this->_user = new User(); } return $this->_user; } } class User { private $_name; public function __construct() { $this->_name = "Joseph Crawford Jr."; } public function GetName() { return $this->_name; } } $app = new App(); echo $app->User()->GetName(); ?>

Инкапсуляция - это механизм, который связывает вместе код и данные, которыми он управляет, и сохраняет как безопасные от внешних помех, так и неправильное использование. Обертка данных и методов в один блок (называемый классом) называется инкапсуляцией. Преимущество инкапсуляции заключается в том, что она выполняет задачу внутри, не заставляя вас беспокоиться.

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

Например

Class OuterClass { private var $innerobject; function increment() { return $this->innerobject->increment(); } }

У вас есть дополнительный слой вокруг объекта, который инкапсулирован, что позволяет внешнему объекту контролировать доступ к внутреннему объекту. Это, в сочетании с созданием внутреннего объекта/свойства private , позволяет скрывать информацию .

encapsulation: инкапсуляция представляет собой концепцию обертывания или связывания связанных элементов данных и методов в одном модуле, известном как инкапсуляция.

вот правильный пример инкапсуляции

name = $n; $this -> age = $a; } public function setAge($ag) { $this -> ag = $ag; } public function display() { echo "welcome " . $this -> name . "
"; return $this -> age - $this -> ag; } } $person = new person("Pankaj", 25); $person -> setAge(10); echo "You are " . $person -> display() . " years old"; ?>

Люди, похоже, смешивают детали ориентации объектов с инкапсуляцией, которая представляет собой гораздо более древнюю и более широкую концепцию. Инкапсулированная структура данных

  • можно передавать с помощью одной ссылки, например, increment (myDate) а не прирост (год, месяц, день).
  • имеет набор применимых операций, хранящихся в одном программном модуле (класс, модуль, файл и т.д.)
  • не позволяет клиенту видеть или манипулировать своими подкомпонентами ЗА ИСКЛЮЧЕНИЕМ, вызвав соответствующие операции.

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

Инкапсуляция - это механизм защиты для вашего класса и структуры данных. Это делает вашу жизнь намного проще. С помощью Encapsulation у вас есть элемент управления доступом и установки параметров и методов класса. У вас есть контроль, чтобы сказать, какая часть видима аутсайдерам и как можно установить параметры ваших объектов.

Доступ и настройка параметров класса

(Хороший путь)

gender; } public function setGender($gender) { if ("male" !== $gender and "female" !== $gender) { throw new \Exception("Set male or female for gender"); } $this->gender = $gender; } }

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

$user = new User(); $user->setGender("male"); // An exception will throw and you can not set "Y" to user gender $user->setGender("Y");

(Плохой путь)

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

gender = "male"; // No exception will throw and you can set "Y" to user gender however // eventually you will face some logical issue in your system that is // very hard to detect $user->gender = "Y";

Методы класса доступа

(Хороший путь)

doThis(...); ... $this->doThat(...); ... $this->doThisExtra(...); } private function doThis(...some Parameters...) { ... } private function doThat(...some Parameters...) { ... } private function doThisExtra(...some Parameters...) { ... } }

Мы все знаем, что мы не должны создавать функцию с 200 строк кода, вместо этого мы должны разбить ее на какую-то отдельную функцию, которая разбивает код и улучшает читабельность кода. Теперь с инкапсуляцией вы можете заставить эти функции быть закрытыми, это значит, что они недоступны посторонним, а позже, когда вы хотите изменить функцию, вы были бы счастливы, если увидите ключевое слово private.

(Плохой путь)

Class User { public function doSomethingComplex() { // do everything here ... ... ... ... } }

Обтекание элементов данных и метода вместе в единую единицу (то есть класс) называется Инкапсуляция . Инкапсуляция похожа на капсулу. Это включает связанные операции и данные, связанные с объектом в этот объект. Инкапсуляция подобна вашей сумке, в которой вы можете хранить свою ручку, книгу и т.д. Это означает, что это свойство инкапсулирования членов и функций.

0) $mark = 10; else $mark = 0; } } } ?>

Я даю еще один пример реальной жизни (ежедневное использование), который является "ТВ-операцией". Многие люди управляют телевидением в повседневной жизни.

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

Инкапсуляция : - перенос данных в один блок. также мы можем сказать, что скрываем информацию о необходимых деталях. Пример . У вас есть мобильный телефон. Там есть какой-то интерфейс, который помогает вам взаимодействовать с мобильным телефоном, и вы можете пользоваться услугами мобильного телефона. Но фактически работающий в сотовом телефоне скроется. u не знаю, как это работает внутри.

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

Давайте рассмотрим пример реальной жизни для инкапсуляции.

Конечно я сейчас не открою Америку и прекрасно знаю, что уже есть 1000и статей на тему инкапсуляции, но я просто не хочу сидеть в тени и тоже блеснуть знаниями.

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

Какое сокрытие? Сокрытие чего? Что такое сокрытие? Ни чё не понятно!

Карач. Правильнее сказать закрытие всего рабочего механизма класса в некую "капсулу". Т.е. написание класса таким образом, чтобы будущему разработчику, использующему ваш класс, не пришлось заглядывать в его реализацию.

Отличным примером Инкапсуляции является большинство модулей и библиотек. Например PHPExcel.

Вы просто качаете архив. Распаковываете на проекте. Подключаете основной файл и поехали. Максимум вызываем пару методов, передавая необходимые параметры. А что там дальше происходит? Как это работает? Нас не интересует.

Ну это если прям по умному сказать.

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

Но тут же нам с вами нужно познакомиться с спецификаторами классов.

Такими как public, protected, private


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

Например:


class cl {
private $a = 1;
public function b() {
return $this->a;
}
}

public используется если вы пишите метод или член который будет возможно использовать в других местах вашей программы.

protected доступен только внутри текущего класса и его наследников!

private по логике ясно. Доступно только в текущем классе.

Не смотря на то, что private юзается онли ин вис класс доступ к нему можно получить, но не желательно!


class cl {
private $a = 1;
public function get() {
return $this->a;
}
}
$class = new cl;
echo $class->get();

На экране появится "1" не смотря на то, что $a это private. Так же мы можем поменять её значение.


class cl {
private $a = 1;
public function get() {
return $this->a;
}
public function set($x) {
$this->a = $x;
}
}
$class = new cl;
$class->set(2);
echo $class->get();

После выпонения увидим "2".

Кстати, если просто написать function asd(){***} не указывая спецификаторы

В общем. Следующая статья будет о том, что будет если дампнуть объект. Ахаха. Ты можешь сказать, что просто выведутся все его члены. Но что же будет если мы зададим каждому разный спецификатор, включая private.

Ставь ОГОНЬ. Подписывайся на