Яка різниця між державними, приватними та захищеними?


988

Коли і навіщо мені користуватися public , privateі protectedфункції і змінні всередині класу? У чому різниця між ними?

Приклади:

// Public
public $variable;
public function doSomething() {
  // ...
}

// Private
private $variable;
private function doSomething() {
  // ...
}

// Protected
protected $variable;
protected function doSomething() {
  // ...
}

59
Я думаю, що це питання також виграє відповіді з практичними прикладами використання кожного, замість того, щоб давати буквальне визначення того, що робить кожне ключове слово.
Метью

70
Я дійсно думаю, що це питання має бути публічним, а не захищеним.
dotancohen

Відповіді:


1260

Ти використовуєш:

  • public область, щоб зробити це властивість / метод доступним з будь-якого місця, інших класів та примірників об'єкта.

  • private область, коли ви хочете, щоб ваше властивість / метод бачили лише в його власному класі.

  • protected сфери, коли ви хочете, щоб ваше властивість / метод були видимими у всіх класах, що розширюють поточний клас, включаючи батьківський клас.

Детальніше: (Для вичерпної інформації)


79
protectedобласть, коли ви хочете зробити свою змінну / функцію видимою у всіх класах, що розширюють поточний клас І його батьківські класи .
Шахід

4
@Shahid - я не розумію вашого погляду. Будь-який клас, який розширює клас А, також розширює батьківський клас А, ні?
JDelage

4
@JDelage - Перегляньте посиланняhttp://www.php.net/manual/en/language.oop5.visibility.php#109324
Шахід

4
@Growler Навіщо взагалі турбуватись використовувати об’єкти?
Й.Стев

27
@Growler, більш корисною відповіддю було б те, що добре приховати якомога більше внутрішніх функцій об'єкта. Таким чином менше шансів зламатись. Якщо ви зробите все загальнодоступним, то інший програміст може змінити змінну, яку ви не хочете, щоб змінити нічим іншим, крім внутрішніх функцій вашого об'єкта.
Відпочинок на Кіпрі

1174

дд

Загальнодоступне:

Коли ви оголошуєте метод (функцію) або властивість (змінну) як public, до цих методів та властивостей можна отримати доступ:

  • Той самий клас, який це заявив.
  • Класи, які успадковують вищезазначений клас.
  • Будь-які сторонні елементи поза цим класом також можуть отримати доступ до цих речей.

Приклад:

<?php

class GrandPa
{
    public $name='Mark Henry';  // A public variable
}

class Daddy extends GrandPa // Inherited class
{
    function displayGrandPaName()
    {
        return $this->name; // The public variable will be available to the inherited class
    }

}

// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

// Public variables can also be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Prints 'Mark Henry'

Захищено:

Коли ви оголошуєте метод (функцію) або властивість (змінну) як protected, до цих методів і властивостей можна отримати доступ

  • Той самий клас, який це заявив.
  • Класи, які успадковують вищезазначений клас.

Члени сторонніх організацій не можуть отримати доступ до цих змінних. "Аутсайдери" в тому сенсі, що вони не є об'єктними екземплярами самого заявленого класу.

Приклад:

<?php

class GrandPa
{
    protected $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

Точна помилка буде такою:

PHP Фатальна помилка: Неможливо отримати доступ до захищеної властивості GrandPa :: $ name


Приватний:

Коли ви оголошуєте метод (функцію) або властивість (змінну) як private, до цих методів та властивостей можна отримати доступ:

  • Той самий клас, який це заявив.

Члени сторонніх організацій не можуть отримати доступ до цих змінних. Аутсайдери в тому сенсі, що вони не є об'єктними екземплярами самого заявленого класу і навіть класів, які успадковують заявлений клас.

Приклад:

<?php

class GrandPa
{
    private $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Results in a Notice 

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

Точні повідомлення про помилки будуть:

Примітка: Не визначена властивість: Daddy :: $ name
Фатальна помилка: Неможливо отримати доступ до приватної власності GrandPa :: $ name


Розбирання класу Дідуся за допомогою Роздуму

Ця тема насправді не виходить за рамки, і я додаю її сюди лише для того, щоб довести, що рефлексія справді потужна. Як я вже говорив у вищезгаданих трьох прикладах, protectedіprivate членів (властивостей та методів) не можна отримати доступ поза класом.

Однак, замислившись, ви можете зробити надзвичайне , навіть отримавши доступ protectedіprivate члени поза класом!

Ну, що таке рефлексія?

Роздум додає можливість реверсувати інженерні класи, інтерфейси, функції, методи та розширення. Крім того, вони пропонують способи отримання док-коментарів щодо функцій, класів та методів.

Преамбула

У нас є клас з іменем Grandpasі кажуть, що у нас є три властивості. Для легкого розуміння врахуйте, що є три діди з іменами:

  • Марк Генрі
  • Джон Clash
  • Буде Джонс

Давайте зробимо їх (привласнення модифікаторів) public, protectedі privateвідповідно. Ви дуже добре це знаєте protectedіprivate членів не можна отримати доступ поза класом. Тепер давайте суперечимо твердженню за допомогою рефлексії.

Код

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected  modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}


# Scenario 1: without reflection
$granpaWithoutReflection = new GrandPas;

# Normal looping to print all the members of this class
echo "#Scenario 1: Without reflection<br>";
echo "Printing members the usual way.. (without reflection)<br>";
foreach($granpaWithoutReflection as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

echo "<br>";

#Scenario 2: Using reflection

$granpa = new ReflectionClass('GrandPas'); // Pass the Grandpas class as the input for the Reflection class
$granpaNames=$granpa->getDefaultProperties(); // Gets all the properties of the Grandpas class (Even though it is a protected or private)


echo "#Scenario 2: With reflection<br>";
echo "Printing members the 'reflect' way..<br>";

foreach($granpaNames as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

Вихід:

#Scenario 1: Without reflection
Printing members the usual way.. (Without reflection)
The name of grandpa is Mark Henry and he resides in the variable name1

#Scenario 2: With reflection
Printing members the 'reflect' way..
The name of grandpa is Mark Henry and he resides in the variable name1
The name of grandpa is John Clash and he resides in the variable name2
The name of grandpa is Will Jones and he resides in the variable name3

Поширені помилки:

Будь ласка, не плутайте із наведеним нижче прикладом. Як ви все ще бачите, учасники privateта protectedучасники не можуть отримати доступ поза класом без використання рефлексії

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}

$granpaWithoutReflections = new GrandPas;
print_r($granpaWithoutReflections);

Вихід:

GrandPas Object
(
    [name1] => Mark Henry
    [name2:protected] => John Clash
    [name3:GrandPas:private] => Will Jones
)

Функції налагодження

print_r, var_exportі var_dumpє функцією налагодження . Вони представляють інформацію про змінну у читаному для людини вигляді. Ці три функції розкриють protectedта privateвластивості об'єктів з PHP 5. Статичні члени класу не будуть показані.


Більше ресурсів:



вибачення за пізнє додавання до цього конвоя. Чи можете ви сказати мені, чому хтось би цим користувався? Ви чудово пояснили, як вони працюють і т. Д. Я просто хотів би знати переваги використання кожного з них. Дякую
JamesG

@JamesG його трохи пояснив в іншому коментарі вище. stackoverflow.com/questions/4361553 / ...
cjmling

Я не знаю, чому, можливо, це трохи не в цьому питанні, але ніхто не згадував, що в PHP є ще два модифікатори доступу: абстрактне та остаточне, це ключове слово можна використовувати лише для класів PHP, але воно все ще має доступ до модифікаторів
bxN5

1
Я хотів би запропонувати вам прочитати пояснення про абстракції , представленої Dhairya Lakhera тут: stackoverflow.com/questions/2558559 / ... . Це ідеальне доповнення до пояснень Шанкара Дамодарана.
Хуліо Марчі

83

Як правило, вважається хорошою практикою встановлення за замовчуванням до мінімальної необхідної видимості, оскільки це сприяє інкапсуляції даних та гарному дизайну інтерфейсу. Розглядаючи змінну та видимість методу члена, подумайте про роль, яку член відіграє у взаємодії з іншими об'єктами.

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

Щоб використовувати автомобіль як аналогію, такі речі, як швидкість, передача та напрямок, будуть приватними змінними. Ви не хочете, щоб водій безпосередньо маніпулював такими речами, як співвідношення повітря / паливо. Натомість ви виставляєте обмежену кількість дій як публічні методи. Інтерфейс автомобіля може включати в себе методи , такі як accelerate(), deccelerate()/ brake(), setGear(), turnLeft(), turnRight()і т.д.

Водій не знає і йому не байдуже, як ці дії здійснюються внутрішніми автомобілями, і висловлюючи, що функціональність може бути небезпечною для водія та інших людей на дорозі. Звідси належна практика розробки загальнодоступного інтерфейсу та інкапсуляції даних за цим інтерфейсом.

Цей підхід також дозволяє змінювати та вдосконалювати реалізацію публічних методів у вашому класі, не порушуючи договір інтерфейсу з кодом клієнта. Наприклад, ви можете вдосконалити accelerate()метод, щоб бути більш економічним, але використання цього методу залишатиметься таким же; клієнтський код не потребує змін, але все-таки пожинає переваги підвищення ефективності.

Редагувати: Оскільки, здається, ви все ще знаходитесь в центрі понять, орієнтованих на вивчення об'єктів (які набагато складніше освоїти, ніж синтаксис будь-якої мови), я настійно рекомендую зібрати копію об'єктів, шаблонів та практик PHP від Метта Зандстри. Це книга, яка вперше навчила мене ефективно використовувати OOP, а не просто навчила мене синтаксису. Я вивчив синтаксис заздалегідь, але це було марно, не розуміючи "чому" ООП.


3
Книга, рекомендована в редакції цієї публікації, справді дуже відмінна. Час я до цих пір виявився досить освічуючим. Перші кілька розділів відповіли на більшість моїх питань, пов’язаних із класом.
Йосія

Книги, які дозволили мені по-справжньому зрозуміти предмети, не витісняючи своє мислення непотрібними деталями, як, наприклад, у Smalltalk, - Девід Тейлор, - це об'єктно-орієнтована технологія: керівництво менеджера та бізнес-інженерія з об’єктовою технологією . Обидва - це лише 100 сторінок, і кожну досить легко прочитати в другій половині дня. Звичайно, є шаблони дизайну Гамми та ін. , Хоча базовий підхід може бути просто описаний "підкласом того, що ви хочете змінити".
Патанджалі

Дуже приємна аналогія. У вас є захищений проти приватного?
Яніс Елмеріс

79

private - доступ до них можна отримати лише в межах класу

protected - Ви можете отримати доступ з класів ІНТЕРІТАЦІЇ

public - можна отримати доступ і з коду ВНУТРІ класу

Це стосується функцій, а також змінних.


Не впевнений, чи захищене визначення тут правильне, із фактично вибраної відповіді, схоже, захищене - доступ до нього можна отримати лише від успадкованого класу, а не з початкового / батьківського класу. Сказати "ВІД класу" може бути дещо заплутаним.
pal4life

7
Я не думаю, що насправді, здається, що обрана відповідь є такою, яка тут бентежить. Дивіться коментар шахідів. До захищеного методу IMHO можна отримати доступ з оригінального класу.
Олаф

може клас може отримати доступ до публіки іншого класу?
Serjas

1
@Serjas: Ні, лише інші об'єкти, якщо вони не є статичними методами / полями.
DanMan

Я не знаю, чи це стосується всіх мов програмування, але в PHP "захищених" властивостях / методах можна отримати доступ або до класу, в якому було оголошено, або до класів, які успадковуються від класу, що визначає властивість / метод.
John Slegers

25

Різниця полягає в наступному:

Public :: Доступ до загальнодоступної змінної або методу може отримати безпосередньо будь-який користувач класу.

Protected :: Захищена змінна або метод не можуть бути доступні користувачами класу, але можуть бути доступні всередині підкласу, який успадковується від класу.

Private :: До приватної змінної чи методу можна отримати доступ лише внутрішньо з класу, у якому вона визначена. Це означає, що приватна змінна чи метод не можуть бути викликані від дитини, яка розширює клас.


17

Області видимості з абстрактними прикладами :: Полегшує розуміння

Ця видимість властивості чи методу визначається попередньою фіксацією декларації одного з трьох ключових слів (загальнодоступних, захищених та приватних)

Загальнодоступне : Якщо властивість або метод визначені як загальнодоступні, це означає, що до нього можна отримати доступ і маніпулювати будь-чим, що може посилатися на об’єкт.

  • Анотація, наприклад. Розгляньте сферу публічної видимості як "публічний пікнік", до якого може прийти кожен.

Захищено: коли налаштування видимості або методу встановлено на захищені члени, доступ може бути лише в межах самого класу та через успадковані та успадковані класи. (Успадковується: - клас може мати всі властивості та методи іншого класу).

  • Розгляньте як захищену сферу видимості як "Пікнік компанії", де членів компанії та членів їхніх сімей дозволяється не публіці. Це найпоширеніше обмеження сфери застосування.

Приватне: Коли видимість властивості чи методу встановлена ​​приватною, лише ті класи, у яких є приватні члени, можуть отримати доступ до цих методів та властивостей (внутрішньо в межах класу), незважаючи на те, яке класне відношення може бути там.

  • з аналогією пікніка вважайте "пікнік компанії, на якому дозволено тільки членів компанії" . не допускаються сім'ї, ані широкий загал.

15
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined

Витягнуто з:

http://php.net/manual/en/language.oop5.visibility.php


12

⚡️ Ось простий спосіб запам'ятати сферу public, protectedі private.

PUBLIC:

  • public область: публічна змінна / функція доступна як для об'єктів, так і для інших класів.

PROTECTED:

  • protected область: захищена змінна / функція доступна для всіх класів, що розширюють поточний клас.
  • Ні! Об'єкти не можуть отримати доступ до цієї області

PRIVATE:

  • private область: Приватна змінна / функція видно лише в поточному класі, де вона визначена.
  • Ні! Клас, який розширює поточний клас, не може отримати доступ до цієї області.
  • Ні! Об'єкти не можуть отримати доступ до цієї області.

Прочитайте видимість методу чи змінної в Посібнику з PHP.


9

Враховуючи " коли ":
я схильний оголошувати все як приватне спочатку, якщо я не зовсім впевнений. Причиною є те, що приватний метод зазвичай набагато простіше перетворити на громадський, ніж навпаки. Це тому, що ви можете бути принаймні впевнені, що приватний метод не використовувався ніде, а не в самому класі. Загальнодоступний метод вже може застосовуватися скрізь, можливо, вимагає великого переписування.

Оновлення : я зараз іду за замовчуванням protected, тому що я виявив, що це досить добре для інкапсуляції і не перешкоджає, коли я продовжую заняття (чого я намагаюся уникнути). Тільки якщо у мене буде вагомий привід використовувати інші два, я буду.

Вагомою причиною для privateметоду може бути той, який реалізує щось притаманне цьому об’єкту, що навіть клас, що розширюється, не повинен змінюватися (фактична причина, крім інкапсуляції, як внутрішнє управління державою). Врешті-решт, це все ще досить легко відстежити, де protectedметод використовується зазвичай, тому я за замовчуванням protectedсьогодні. Можливо, не 100% об'єктивний досвід "в окопах", я визнаю.


3
З вашим оновленням: чи можете ви зрозуміти, як "достатньо доброго" та "доброго розуму" йдуть разом? Наприклад, використання privateвсе ще буде "досить хорошим" для використання, але ви не припускаєте, що більше, хоча і раніше, чому ви давали звук, як "вагомий привід" все-таки: інкапсуляція.
хакре

@hakre: Причина, чому нам слід прагнути до інкапсуляції, - це уникати стану витоку у зовнішню область. protectedце вже робиться, але ви залишаєте його гнучким для розширення / успадкування. Знову ж таки, якщо у вас немає вагомих причин це зробити private.
DanMan

Ну, це, мабуть, суть, з якою ми не погоджуємось: protectedнасправді просочується у зовнішню сферу, і це часто вам подобається, оскільки воно підтримує погані дизайнерські рішення, такі як неявна підтримка спадщини, тоді як краще віддати перевагу композиції. Ось чому дотримуватися приватного, якщо у вас немає фактичних вимог не часто, це кращий спосіб почати писати код. Це також заважатиме приймати дизайнерські рішення занадто рано, поки вони фактично ще не потрібні.
хакре

Я не буду сперечатися з вашою загальною точкою, тому що це досить справедливо, але protectedне просочується у зовнішню область (код, що викликає / отримує доступ до методу / поля), а лише у внутрішню сферу (розширення класів). Існує різниця, настільки ж незначна, як це може бути для вас. Набагато простіше відстежити використання protectedполя, ніж поле public.
DanMan

6

Посібник із PHP добре прочитав тут питання .

Видимість властивості чи методу може бути визначена за допомогою префіксації декларації ключовими словами, загальнодоступними, захищеними чи приватними. Учасники класу, оголошені громадськістю, можуть бути доступні всюди. Доступ до учасників, оголошених захищеними, може бути доступний лише у самому класі та у спадок та батьківські класи. Члени, оголошені приватними, мають доступ лише до класу, який визначає члена.


6

Для мене це найкорисніше спосіб зрозуміти три типи властивостей:

Публічний : Використовуйте це, коли ви все в порядку. Доступ до цієї змінної здійснюється безпосередньо та змінюється з будь-якої точки вашого коду.

Приклад використання поза класом:

$myObject = new MyObject()
$myObject->publicVar = 'newvalue';
$pubVar = $myObject->publicVar;

Захищено : використовуйте це, коли ви хочете змусити інших програмістів (і себе) використовувати геттери / сеттери поза класом під час доступу та налаштування змінних (але ви повинні бути послідовними та використовувати також геттери та сеттери всередині класу). Це абоprivate як правило, є типовим способом ви повинні налаштувати всі властивості класу.

Чому? Тому що якщо ви в якийсь час у майбутньому (можливо, навіть через 5 хвилин) вирішите, що ви хочете маніпулювати значенням, яке повертається для цього властивості, або робити щось з ним перед тим, як отримати / налаштувати, ви можете зробити це, не рефакторируючи всюди, де у вас є використовували його у своєму проекті.

Приклад використання поза класом:

$myObject = new MyObject()
$myObject->setProtectedVar('newvalue');
$protectedVar = $myObject->getProtectedVar();

Приватне : privateвластивості дуже схожі на protectedвластивості. Але відмінна риса / відмінність полягає в тому, що її роблятьprivate також недоступним для дочірніх класів, не використовуючи геттер або сеттер батьківського класу.

Отже, якщо ви використовуєте getters та setters для властивості (або якщо вона використовується лише внутрішньо батьківським класом, і вона не має бути доступною більше ніде), ви можете також зробити це private, щоб не допустити будь-кого із спроб використовувати його безпосередньо та вводити помилки .

Приклад використання всередині дочірнього класу (який розширює MyObject):

$this->setPrivateVar('newvalue');
$privateVar = $this->getPrivateVar();


4

Змінні в PHP подаються у трьох різних типах:

Загальнодоступні: значення цього типу змінних доступні у всіх сферах дії та вимагають виконання коду. оголосити як:public $examTimeTable;

Приватне: значення цього типу змінної доступні лише для класу, до якого належать. private $classRoomComputers;

Захищені: цінності цього класу і доступні лише тоді, коли доступ надано у формі спадкування або їх дочірнього класу. зазвичай використовується ::для надання доступу батьківським класом

protected $familyWealth;


3

Відродження старого питання, але я думаю, що дійсно хороший спосіб подумати про це з точки зору API, який ви визначаєте.

  • public - Все, що позначено загальнодоступним, є частиною API, який кожен, хто використовує ваш клас / інтерфейс / інший, буде використовувати і покладатися на нього.

  • protected- Не обманюйте, це теж частина API! Люди можуть підкласирувати, розширювати ваш код і використовувати все, що позначено захищеним.

  • private- Приватні властивості та методи можна змінювати скільки завгодно. Ніхто більше не може ними скористатися. Це єдині речі, які ви можете змінити, не вносячи порушень.

Або, кажучи Семвером :

  • Зміни в чому-небудь publicабо protectedповинні вважатися ОСНОВНИми змінами.

  • Що-небудь нове publicабо protectedповинно бути (принаймні) МИНОР

  • Лише нові / зміни в чому-небудь privateможуть бути PATCH

Тож, що стосується збереження коду, добре бути уважним щодо того, що ви робите publicабо protectedтому, що це те, що ви обіцяєте своїм користувачам.


1

Коли ми дотримуємося об'єктно-орієнтованого php у нашому проекті, ми повинні дотримуватися деяких правил, щоб використовувати модифікатори доступу в php. Сьогодні ми будемо чітко вивчати, що таке модифікатор доступу та як ми можемо ним користуватися. Модифікатори доступу PHP використовуються для встановлення прав доступу з класами PHP та їх членами, які є функціями та змінними, визначеними в межах класу. У php є три сфери для учасників класу.

  1. ПУБЛІЧНИЙ
  2. ПРИВАТНА
  3. ЗАХИЩЕНО

Тепер давайте розглянемо наступне зображення, щоб зрозуміти рівень доступу модифікатора доступу введіть тут опис зображення

Тепер давайте розглянемо наступний список, щоб знати про можливі ключові слова PHP, які використовуються як модифікатори доступу.

public: - клас або його члени, визначені цим модифікатором доступу, будуть публічно доступними з будь-якого місця, навіть з-за меж класу.

private: - учасникам класу з цим ключовим словом буде доступ до самого класу. ми не можемо отримати доступ до приватних даних з підкласу. Це захищає членів від доступу поза класом.

захищені: - такі ж, як приватні, за винятком того, що дозволяють підкласам отримувати доступ до захищених членів суперкласу.

Тепер дивіться таблицю, щоб зрозуміти модифікатор доступу. Прочитайте повну статтю, модифікація доступу до php


1

Public: - це стан за замовчуванням, коли ви оголошуєте змінну або метод, доступ до якого можна отримати безпосередньо будь-яким безпосередньо до об'єкта.

Protected: Доступ можна отримати лише в межах об'єкта та підкласів.

Private: Можна посилатися лише в межах об'єкта, а не підкласи.


0

Зазначені ключові слова є модифікаторами доступу та допомагають нам здійснювати інкапсуляцію (або приховування інформації). Вони повідомляють компілятору, які інші класи повинні мати доступ до визначеного поля чи методу.

приватний - Тільки поточний клас матиме доступ до поля чи методу.

захищено - Лише поточний клас та підкласи (а іноді і класи з однаковим пакетом) цього класу матимуть доступ до поля чи методу.

public - будь-який клас може посилатися на поле або викликати метод.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.