Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Вот пример из первой ссылки в поиске Google для "php encapsulation":

<?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();

?>

Ответ 2

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

Ответ 3

Инкапсуляция - это механизм защиты для вашего класса и структуры данных. Это делает вашу жизнь намного проще. С помощью 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
        ...
        ...
        ...
        ...
    }
}

Ответ 4

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

Например

class OuterClass
{
  private var $innerobject;

  function increment()
  {
    return $this->innerobject->increment();
  }
}

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

Ответ 5

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";
?>

Ответ 6

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

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

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

Ответ 7

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

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

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

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

Ответ 8

/* class that covers all ATM related operations */
class ATM {

    private $customerId;
    private $atmPinNumber;
    private $amount;

    // Verify ATM card user
    public function verifyCustomer($customerId, $atmPinNumber) {
        ... function body ...
    }

    // Withdraw Cash function
    public function withdrawCash($amount) {
        ... function body ...
    }

    // Retrieve mini statement of our account
    public function miniStatement() {
        ... function body ...
    }
}

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

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

Это означает, что у пользователей нет полной информации о реализации класса ATM. Его просто называют скрытием данных.

Ссылка:http://www.thecreativedev.com/php-encapsulation-with-simple-example/

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

 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/

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

Ответ 13

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

Ответ 14

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

class ecap {

public $name;

private $id;

protected $tax;

}

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

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

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

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

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

Ответ 15

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