Jaka jest różnica między publicznym, prywatnym i chronionym?

Kiedy i dlaczego powinienem używać public, private, i protected Funkcje i zmienne wewnątrz klasy? Jaka jest między nimi różnica?

Przykłady:

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

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

// Protected
protected $variable;
protected function doSomething() {
  // ...
}
Author: Edward, 2010-12-06

16 answers

Używasz:

  • public scope, aby ta zmienna / funkcja była dostępna z dowolnego miejsca, inne klasy i instancje obiektu.

  • private Zakres, gdy chcesz, aby Twoja zmienna / funkcja była widoczna tylko w swojej klasie.

  • protected Zakres, gdy chcesz, aby Twoja zmienna / funkcja była widoczna we wszystkich klasach, które rozszerzają bieżącą klasę, w tym klasę nadrzędną.

Więcej: (dla kompleksowego informacje)

 1115
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 13:57:46

dd

Public:

Jeśli zadeklarujesz metodę (funkcję) lub właściwość (zmienną) jako public, te metody i właściwości mogą być dostępne przez:

  • ta sama klasa, która to zadeklarowała.
  • klasy, które dziedziczą wyżej zadeklarowaną klasę.
  • wszelkie obce elementy poza tą klasą mogą również uzyskać dostęp do tych rzeczy.

Przykład:

<?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'

Chroniony:

Gdy zadeklarujesz metodę (funkcję) lub właściwość (zmienna) jako protected, te metody i właściwości mogą być dostępne przez

  • ta sama klasa, która to zadeklarowała.
  • klasy, które dziedziczą wyżej zadeklarowaną klasę.

Członkowie z zewnątrz nie mogą uzyskać dostępu do tych zmiennych. "Outsiders" w tym sensie, że nie są obiektami samej zadeklarowanej klasy.

Przykład:

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

Dokładny błąd będzie taki:

PHP Fatal error: Cannot access protected property::$name


Prywatne:

Jeśli zadeklarujesz metodę (funkcję) lub właściwość (zmienną) jako private, te metody i właściwości mogą być dostępne przez:

  • ta sama klasa, która to zadeklarowała.

Członkowie z zewnątrz nie mogą uzyskać dostępu do tych zmiennych. Outsiderów w tym sensie, że nie są instancjami obiektowymi samej zadeklarowanej klasy, a nawet klasami, które dziedziczą zadeklarowaną klasy.

Przykład:

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

Dokładne komunikaty o błędach będą następujące:

Notice: Undefined property: Daddy::$name
Nie można uzyskać dostępu do własności prywatnej Dziadek::$name


Rozwarstwienie klasy dziadków za pomocą odbicie

Ten temat nie jest tak naprawdę poza zakresem, i dodaję go tutaj, aby udowodnić, że refleksja jest naprawdę potężna. Jak stwierdziłem w powyższych trzech przykłady, protected i private członkowie (właściwości i metody) nie mogą być dostępne poza klasą.

Jednak z refleksją można zrobić extra-zwyczajne nawet dostęp protected oraz private członkowie spoza klasy!

Co to jest odbicie?

Reflection dodaje możliwość odwrócenia klas inżynierskich, interfejsów, funkcje, metody i rozszerzenia. Dodatkowo oferują sposoby na Pobierz komentarze doc dla funkcji, klas i metod.

Preambuła

Mamy klasę o nazwie {[14] } i mówimy, że mamy trzy właściwości. Dla łatwego zrozumienia, rozważ, że istnieją trzy dziadkowie o imionach: {]}

  • Mark Henry
  • John Clash
  • Will Jones]}

Zróbmy je (Przypisz modyfikatory) public, protected i private odpowiednio. Dobrze wiesz, że członkowie protected i private nie mogą być dostępni poza klasą. Teraz zaprzeczmy stwierdzenie za pomocą refleksji.

Kod

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

Wyjście:

#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

Powszechne Nieporozumienia:

Proszę nie mylić z poniższym przykładem. Jak widać, członkowie private i protected nie mogą być dostępni poza klasy bez użycia reflection

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

Wyjście:

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

Funkcje debugowania

print_r, var_export i var_dumpfunkcjami debuggera . Prezentują informacje o zmiennej w formie czytelnej dla człowieka. Te trzy funkcje ujawnią właściwości protected i private obiektów z PHP 5. Static class members will not be showed.


Więcej zasobów:


 1046
Author: Shankar Damodaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 08:25:10

Zwykle uważa się za dobrą praktykę domyślną najniższą widoczność wymaganą, ponieważ sprzyja to hermetyzacji danych i dobrej konstrukcji interfejsu. Rozważając zmienną członka i widoczność metody pomyśl o roli, jaką członek odgrywa w interakcji z innymi obiektami.

Jeśli "kodujesz do interfejsu, a nie do implementacji", zazwyczaj podejmowanie decyzji dotyczących widoczności jest dość proste. Ogólnie rzecz biorąc, zmienne powinny być prywatne lub chronione, chyba że masz dobry powód, by je ujawnić. Zamiast tego użyj publicznych accesorów (getterów/setterów), aby ograniczyć i regulować dostęp do wewnętrznych elementów klasy.

Aby użyć samochodu jako analogii, rzeczy takie jak prędkość, bieg i kierunek byłyby prywatnymi zmiennymi instancji. Nie chcesz, aby kierowca bezpośrednio manipulował takimi rzeczami, jak stosunek powietrza do paliwa. Zamiast tego ujawniasz ograniczoną liczbę działań jako metody publiczne. Interfejs do samochodu może zawierać metody takie jak accelerate(), deccelerate()/brake(), setGear(), turnLeft(), turnRight(), itd.

Kierowca nie wie, ani nie powinien przejmować się tym, jak te działania są realizowane przez wnętrze samochodu, a ujawnianie tej funkcjonalności może być niebezpieczne dla kierowcy i innych osób na drodze. Stąd dobra praktyka projektowania interfejsu publicznego i hermetyzacji danych za tym interfejsem.

To podejście pozwala również zmieniać i ulepszać implementację publicznych metod w twojej klasie bez naruszania umowy interfejsu z kodem klienta. Na na przykład, możesz poprawić metodę accelerate(), aby była bardziej oszczędna, jednak użycie tej metody pozostanie takie samo; kod klienta nie wymagałby żadnych zmian, ale nadal czerpałby korzyści z poprawy wydajności.

Edit: ponieważ wydaje się, że wciąż jesteś w trakcie uczenia się pojęć obiektowych (które są znacznie trudniejsze do opanowania niż składnia jakiegokolwiek języka), ja wysoce zalecam pobranie kopii obiektów PHP, wzorców i praktyki autor: Matt Zandstra Jest to książka, która po raz pierwszy nauczyła mnie Jak efektywnie używać OOP, a nie tylko uczyć mnie składni. Nauczyłem się składni lata wcześniej, ale to było bezużyteczne bez zrozumienia "dlaczego" OOP.

 82
Author: The Awnry Bear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-03 20:24:05

Private - dostępne tylko z poziomu klasy

Protected - można uzyskać dostęp z poziomu klasy i klas dziedziczących

Public-może być dostępny z kodu poza klasą, jak również

Dotyczy to zarówno funkcji, jak i zmiennych.

 70
Author: Olaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 22:17:02

Różnica jest następująca:

Public :: publiczna zmienna lub metoda może być dostępna bezpośrednio przez dowolnego użytkownika klasy.

Protected :: chroniona zmienna lub metoda nie mogą być dostępne dla użytkowników klasy, ale mogą być dostępne wewnątrz podklasy, która dziedziczy z klasy.

Private :: prywatna zmienna lub metoda może być dostępna tylko wewnętrznie z klasy, w której jest zdefiniowana.Oznacza to, że prywatna zmienna lub metoda nie może być wezwany od dziecka, które rozszerza klasę.

 24
Author: Matthew Watts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-03 20:47:27

Zakresy widoczności z przykładami abstrakcyjnymi :: ułatwia zrozumienie

Ta widoczność Właściwości lub metody jest zdefiniowana przez wstępne ustalenie deklaracji jednego z trzech słów kluczowych (Public, protected I private)

Public : Jeśli właściwość lub metoda jest zdefiniowana jako public, oznacza to, że może być zarówno dostępna, jak i manipulowana przez cokolwiek, co może odnosić się do obiektu.

  • Streszczenie np. Think public visibility scope as " public piknik", na który każdy może przyjść.

Protected: gdy właściwość lub widoczność metody jest ustawiona na protected members, może być dostęp tylko wewnątrz samej klasy i przez dziedziczenie i dziedziczenie klas. (Dziedziczone: - klasa może mieć wszystkie właściwości i metody innej klasy).

  • pomyśl jako chroniony zakres widoczności jako "piknik firmowy" gdzie Członkowie firmy i ich rodziny mogą nie być publicznie. To najczęstszy zakres ograniczenie.

Private: gdy właściwość lub widoczność metody jest ustawiona na private, tylko klasa, która ma członków prywatnych, może uzyskać dostęp do tych metod i właściwości(wewnętrznie w ramach klasy), pomimo jakiejkolwiek relacji klasy.

  • z analogią piknikową pomyśl jak "piknik firmowy, w którym tylko członkowie firmy są dozwolone" na pikniku. Nie rodzina ani ogół społeczeństwa są dozwolone.
 16
Author: Suman K.C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 03:19:11
/**
 * 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

Pobrano Z:

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

 14
Author: Techie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 11:01:26

⚡ ️ Oto prosty sposób na zapamiętanie zakresu public, protected i private.

PUBLIC:

  • public zakres: publiczna zmienna / funkcja jest dostępna zarówno dla obiektów, jak i innych klas.

PROTECTED:

  • protected Zakres: chroniona zmienna / funkcja jest dostępna dla wszystkich klas rozszerzających bieżącą klasę.
  • Nie! Obiekty nie mogą uzyskać dostępu do tego zakres

PRIVATE:

  • private scope: prywatna zmienna / funkcja jest widoczna tylko w bieżącej klasie, w której jest definiowana.
  • Nie! Klasa rozszerzająca bieżącą klasę nie może uzyskać dostępu do tego zakresu. Nie! Obiekty nie mogą uzyskać dostępu do tego zakresu.

Przeczytaj widoczność metody lub zmiennej w instrukcji PHP.

 9
Author: Ahmad Awais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 08:02:20

Rozważając " Kiedy':
Zazwyczaj deklaruję wszystko jako prywatne, jeśli nie jestem do końca pewien. Powodem jest to, że zwykle znacznie łatwiej jest włączyć prywatną metodę publiczną niż na odwrót. To dlatego, że możesz mieć przynajmniej pewność, że metoda prywatna nie została użyta nigdzie poza samą klasą. Metoda publiczna może być już używana wszędzie, prawdopodobnie wymagając obszernego ponownego zapisu.

Update : obecnie wybieram domyślną wartość protected, ponieważ doszedłem do wniosku, że jest wystarczająco dobry do enkapsulacji i nie przeszkadza mi w przedłużaniu klas (czego i tak staram się unikać). Tylko jeśli będę miał dobry powód, by użyć pozostałych dwóch, zrobię to.

Dobrym powodem dla metody private byłby taki, który implementuje coś nieodłącznego temu obiektowi, czego nawet rozszerzająca klasa nie powinna się zmieniać (uzasadnienie faktyczne, oprócz enkapsulacji, jak wewnętrzne zarządzanie stanem). W końcu i tak łatwo jest wyśledzić, gdzie zazwyczaj używana jest metoda protected, więc obecnie domyślam się protected. Może nie w 100% obiektywne doświadczenie "w okopach", przyznaję.

 8
Author: DanMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 10:28:19

Podręcznik PHP dobrze się czyta na pytanie tutaj .

Widoczność Właściwości lub metody może być zdefiniowana przez prefiks deklaracji ze słowami kluczowymi public, protected lub private. Członkowie klasy uznani za publicznych mogą być dostęp wszędzie. Członkowie zadeklarowani jako protected mogą być dostępni tylko w obrębie samej klasy oraz przez klasy dziedziczone i nadrzędne. Członkowie zadeklarowani jako prywatni mogą być dostępni tylko przez klasę, która definiuje danego członka.

 6
Author: code_burgar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 22:16:37

Dla mnie jest to najbardziej użyteczne sposób na zrozumienie trzech typów właściwości:

Public : Użyj tego, gdy ta zmienna jest dostępna bezpośrednio i zmieniana z dowolnego miejsca w kodzie.

Przykładowe użycie spoza klasy:

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

Protected : Użyj tego, gdy chcesz zmusić innych programistów (i siebie) do używania getterów/setterów poza klasą podczas uzyskiwania dostępu i ustawiania zmiennych (ale powinieneś być spójny i używać getterów i setterów wewnątrz klasy). To or private jest domyślnym sposobem, w jaki powinieneś ustawić wszystkie właściwości klasy.

Dlaczego? Ponieważ jeśli zdecydujesz się w pewnym momencie w przyszłości (może nawet w ciągu 5 minut), że chcesz manipulować wartością zwracaną dla tej właściwości lub zrobić coś z nią przed pobraniem/ustawieniem, możesz to zrobić bez refaktoryzacji wszędzie, gdzie użyłeś jej w swoim projekcie.

Przykładowe użycie spoza Klasa:

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

Prywatne: private właściwości są bardzo podobne do właściwości protected. Ale cechą wyróżniającą / różnicą jest to, że uczynienie go private również czyni go niedostępnym dla klas potomnych bez użycia gettera lub settera klasy macierzystej.

Więc zasadniczo, jeśli używasz getterów i setterów dla właściwości (lub jeśli jest ona używana tylko wewnętrznie przez klasę nadrzędną i nie ma być dostępna nigdzie indziej), równie dobrze możesz ją utworzyć private, aby zapobiec każdy, kto próbuje użyć go bezpośrednio i wprowadzając błędy .

Przykład użycia wewnątrz klasy potomnej (która rozszerza MyObject):

$this->setPrivateVar('newvalue');
$privateVar = $this->getPrivateVar();
 6
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 18:30:39

Pozwalają na różne poziomy enkapsulacji

 4
Author: Mchl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 22:22:42

Zmienne w PHP są rzutowane w trzech różnych typach:

Public: wartości tych zmiennych są dostępne we wszystkich zakresach i wywołują wykonanie Twojego kodu. declare as: public $examTimeTable;

Private: wartości tego typu zmiennej są dostępne tylko dla klasy, do której należy. private $classRoomComputers;

Protected: wartości tej klasy dostępne tylko wtedy, gdy dostęp został przyznany w formie dziedziczenia lub ich klasy potomnej. zazwyczaj używane :: do udzielania dostępu przez rodzica Klasa

protected $familyWealth;

 4
Author: star18bit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-15 08:25:49

Ożywiam stare pytanie, ale myślę, że naprawdę dobrym sposobem na myślenie o tym jest interfejs API, który definiujesz.

  • public - wszystko oznaczone jako publiczne jest częścią API, z którego będzie korzystać każdy, kto używa twojej klasy/interfejsu/innych.

  • protected - nie dajcie się zwieść, jest to również część API! Ludzie mogą podklasować, rozszerzyć kod i używać czegokolwiek oznaczonego jako chronione.

  • private - prywatne właściwości i metody mogą być zmieniał się, ile chcesz. Nikt inny nie może ich użyć. Są to jedyne rzeczy, które można zmienić bez wprowadzania zmian.

Or in Semver terms:

  • Zmiany w cokolwiek public lub protected należy uznać za istotne zmiany.

  • Wszystko co nowe public LUB protected powinno być (przynajmniej) drobne

  • Tylko nowe/zmiany do czegokolwiek private może być PATCH

Więc pod względem zachowania kodu, jego dobrze jest uważać na to, co robisz public lub protected, ponieważ są to rzeczy, które obiecujesz swoim użytkownikom.

 3
Author: mcfedr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 09:51:18

Public: jest stanem domyślnym, gdy deklarujesz zmienną lub metodę, dostęp do niej może uzyskać cokolwiek bezpośrednio do obiektu.

Protected: moĹźe byÄ ‡ dostÄ ™ pne tylko w obiektach i podklasach.

Private: może być odwołany tylko wewnątrz obiektu, a nie podklas.

 1
Author: Nomadme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-04 17:46:54

Trzy Poziomy Widoczności

W OOP PHP mamy Trzy poziomy widoczności dla właściwości i metod klasy: public, protected I private. Widoczność jest deklarowana za pomocą słowa kluczowego visibility, aby określić, jaki poziom widoczności ma właściwość lub metoda. Trzy poziomy określają, czy właściwość lub metoda może być dostępna poza klasą oraz w klasach rozszerzających klasę.

Public

Ten poziom nie ma żadnych ograniczeń, co oznacza, że może być wywołany w dowolnym zakresie. Oznacza to, że Publiczna właściwość obiektu może być zarówno pobierana, jak i modyfikowana z dowolnego miejsca w programie - w klasie, podklasie lub poza klasą.

Protected

Protected properties and methods can be accessed from inside the class they are declarated, or in any class that extends them. Nie można uzyskać do nich dostępu spoza klasy lub podklasy.

Private

Własność prywatna lub metoda nie może być dostęp przez podklasę klasy, w której jest zdefiniowana. Jeśli masz klasę z chronioną właściwością i prywatną właściwością, a następnie rozszerz tę klasę w podklasie, możesz uzyskać dostęp do chronionej właściwości, ale nie własności prywatnej.

 1
Author: Niby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 16:12:49