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

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

Solutions Collecting From Web of "Что такое инкапсуляция с простым примером в php?"

Инкапсуляция – это просто перенос некоторых данных в объект. Термин «инкапсуляция» часто используется взаимозаменяемо с «скрытием информации». В Википедии есть хорошая статья .

Вот пример из первой ссылки в поиске Google для «инкапсуляции php» :

<?php class App { private static $_user; public function User( ) { if( $this->_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: Инкапсуляция представляет собой концепцию обертывания или связывания связанных элементов данных и методов в одном модуле, известном как инкапсуляция.

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

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

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

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

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

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

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

(Хороший способ)

 <?php class User { private $gender; public function getGender() { return $this->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.

 <?php class User { public $gender; } $user = new User(); $user->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'; 

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

(Хороший способ)

 <?php class User { public function doSomethingComplex() { $this->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 ... ... ... ... } } 

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

Инкапсуляция – это процесс удаления данных объекта из внешнего мира и доступ к нему ограничивается членами класса.

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

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

 <?php class YourMarks { private $mark; public Marks { get { return $mark; } set { if ($mark > 0) $mark = 10; else $mark = 0; } } } ?> 

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

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

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

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

  class MyClass{ private $name; public function showName($newName){ $this->name = $newName; return $this->name; } } //instantiate object $obj = new MyClass(); echo $obj->showName("tisuchi"); 

В этом случае инкапсуляция означает, что мы ограничиваем некоторые свойства. Например, свойство name, мы не можем получить доступ извне класса. С другой стороны, мы можем получить доступ к публичной функции под названием showName () с одним частным параметром.

Просто то, что я предпочитаю инкапсулировать,

видимость вашей собственности и метода.

Хотя, если у вас есть желание понять инкапсуляцию, я ссылаюсь на свой специальный учебник, основанный на инкапсуляции.

http://tisuchi.com/object-oriented-php-part-3-encapsulation-php/

Надеюсь, это сделает вашу концепцию более ясной. Повеселись!

В основном, это то, как мы определяем видимость наших свойств и методов. Когда вы создаете классы, вы должны спросить себя, какие свойства и методы можно получить за пределами класса. Допустим, у нас есть свойство foo. Если класс расширяет ваш класс, разрешено ли ему манипулировать и получать доступ к foo? Что делать, если кто-то создает экземпляры вашего класса? Разрешено ли им манипулировать и получать доступ к foo?

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

 class ecap { public $name; private $id; protected $tax; } 

Если вы хотите получить доступ к закрытым или защищенным свойствам, вам необходимо использовать методы getter и setter в своем классе, которые будут доступны извне вашего класса. Значит, вы не можете получить доступ к своим частным или защищенным свойствам непосредственно извне своего класса, но можете использовать их с помощью любых методов. Давайте взглянем-

в классе добавьте следующий метод:

 class ecap { public function userId(){ return $this->id; } } 

и мы можем получить к нему доступ, как:

  $obj = new ecap(); echo $obj->userId();