Nano Hash - криптовалюты, майнинг, программирование

В чем разница между публичным, частным и защищенным?

Когда и почему мне следует использовать public, private и protected функции и переменные внутри класса? В чем разница между ними?

Примеры:

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

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

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

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

Ответы:


1

Ты используешь:

  • public, чтобы сделать это свойство / метод доступным из любого места, из других классов и экземпляров объекта.

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

  • protected, если вы хотите сделать свое свойство / метод видимым во всех классах, расширяющих текущий класс, включая родительский класс.

Если вы не используете модификатор видимости, свойство / метод будут общедоступными.

Подробнее: (для получения исчерпывающей информации)

05.12.2010
  • protected, если вы хотите сделать свою переменную / функцию видимой во всех классах, расширяющих текущий класс И его родительские классы. 02.05.2012
  • @Shahid - Я не понимаю твою точку зрения. Любой класс, расширяющий класс A, также расширяет родительский класс A, не так ли? 13.09.2012
  • @JDelage - См. Ссылку http://www.php.net/manual/en/language.oop5.visibility.php#109324 18.10.2012
  • @JDelage - и эта ссылка также ссылка 19.10.2012
  • @Safraz, Спасибо за описание ... а есть ли вред просто сделать все мои методы общедоступными? 13.03.2013
  • @Growler Зачем тогда вообще использовать объекты? 15.01.2014
  • @Growler, более полезным ответом было бы то, что хорошо скрыть как можно большую часть внутренней работы объекта. Таким образом, вероятность поломки меньше. Если вы сделаете все общедоступным, другой программист может изменить переменную, которую вы не хотите изменять, чем-либо, кроме внутренней работы вашего объекта. 15.04.2014
  • Не существует такой вещи, как экземпляр объекта. Есть только экземпляр класса, который является объектом. Пожалуйста, отредактируйте свой ответ. 12.02.2017
  • включая родительский класс, IMHO вводит в заблуждение - он должен включать сам класс 27.03.2019

  • 2

    dd

    Публичный:

    Когда вы объявляете метод (функцию) или свойство (переменную) как 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


    Разделение класса дедушки с помощью Reflection

    Эта тема на самом деле не выходит за рамки, и я добавляю ее сюда, чтобы доказать, что отражение действительно мощно. Как я указывал в трех приведенных выше примерах, к членам protected и private (свойствам и методам) нельзя получить доступ вне класса.

    Однако с помощью отражения вы можете сделать экстраординарное, даже получив доступ к членам protected и private вне класса!

    Ну что такое отражение?

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

    Преамбула

    У нас есть класс с именем Grandpas и, скажем, у нас есть три свойства. Для облегчения понимания рассмотрим трех дедушек с именами:

    • Марк Генри
    • Джон Клэш
    • Уилл Джонс

    Сделаем их (назначим модификаторы) 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. Статические члены класса не отображаются.


    Дополнительные ресурсы:


    20.02.2014
  • извинения за позднее добавление к этой колонке. Можете ли вы сказать мне, зачем кому-то их использовать? Вы прекрасно объяснили, как они работают и т. Д. Я просто хотел бы знать преимущества использования каждого из них. Спасибо 18.03.2017
  • @JamesG это немного объяснено в другом комментарии выше. stackoverflow.com/questions/4361553/ 05.05.2017
  • Я не знаю, почему, возможно, это немного не входит в этот вопрос, но никто не упомянул, что в PHP есть еще два модификатора доступа: абстрактный и окончательный. Это ключевое слово может использоваться только для классов PHP, но оно все еще имеет доступ к модификаторам 06.06.2017
  • Я предлагаю вам прочитать объяснение абстракции, предоставленное Дхайрья Лакхера здесь: stackoverflow.com/questions/2558559/. Это прекрасное дополнение к объяснениям Шанкара Дамодарана. 14.10.2017
  • Зачем читать слова .. когда картинка говорит сама за себя;) 14.08.2020

  • 3

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

    Если вы «кодируете интерфейс, а не реализацию», то обычно довольно просто принимать решения о видимости. В общем, переменные должны быть закрытыми или защищенными, если у вас нет веских причин для их раскрытия. Вместо этого используйте общедоступные методы доступа (геттеры / сеттеры) для ограничения и регулирования доступа к внутренним компонентам класса.

    Если использовать автомобиль в качестве аналогии, такие вещи, как скорость, передача и направление, будут частными переменными экземпляра. Вы же не хотите, чтобы водитель напрямую управлял такими вещами, как соотношение воздух / топливо. Вместо этого вы предоставляете ограниченное количество действий как общедоступные методы. Интерфейс автомобиля может включать такие методы, как accelerate(), _2 _ / _ 3_, setGear(), turnLeft(), turnRight() и т. Д.

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

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

    Изменить: поскольку кажется, что вы все еще изучаете объектно-ориентированные концепции (которые намного сложнее освоить, чем синтаксис любого языка), я настоятельно рекомендую выбрать копия книги Мэтта Зандстры Объекты, шаблоны и практика PHP. Это книга, которая впервые научила меня как эффективно использовать ООП, а не просто научила меня синтаксису. Я выучил синтаксис за много лет до этого, но это было бесполезно без понимания «почему» ООП.

    03.09.2012
  • Книга, рекомендованная при редактировании этого поста, действительно очень хороша. Кусок, который я до сих пор, оказался весьма поучительным. Первые несколько глав ответили на большинство моих вопросов, связанных с классом. 30.12.2014
  • Книги, которые позволили мне по-настоящему понимать объекты, не загромождая мое мышление ненужными деталями, например, примеры в Smalltalk, были написаны Дэвидом А. Тейлором (Object Oriented Technology: A Manager's Guide) и Business Инжиниринг с объектной технологией. Обе книги содержат всего 100 страниц, и каждую достаточно легко прочитать днем. Конечно, есть Шаблоны проектирования от Gamma и др., Хотя базовый подход можно просто описать как «подклассифицируйте то, что вы хотите изменить». 03.04.2016
  • Очень хорошая аналогия. У вас есть один для защищенного и частного? 12.03.2018

  • 4

    private - доступен только из ВНУТРИ класса

    protected - доступен из классов ВНУТРИ класса и НАСЛЕДОВАНИЯ

    public - также можно получить доступ из кода ВНЕ класса

    Это относится как к функциям, так и к переменным.

    05.12.2010
  • Не уверен, что защищенное определение здесь правильное, из фактического выбранного ответа кажется, Защищено - можно получить доступ только из унаследованного класса, а не из исходного / родительского класса. Сказать ВНУТРИ класса может немного сбить с толку. 11.10.2012
  • Я так не думаю, на самом деле кажется, что выбранный ответ здесь сбивает с толку. См. Комментарий Шахидов. ИМХО, к защищенному методу можно получить доступ из исходного класса. 11.10.2012
  • может ли класс получить доступ к публике другого класса? 08.11.2012
  • @Serjas: Нет, только другой объект, если только это не статические методы / поля. 18.08.2013
  • Я не знаю, применимо ли это ко всем языкам программирования, но в PHP к защищенным свойствам / методам можно получить доступ либо в классе, в котором они были объявлены, либо в классах, которые наследуются от класса, определяющего свойство / метод. 19.03.2015

  • 5

    Разница в следующем:

    Public :: Общедоступная переменная или метод могут быть доступны напрямую любому пользователю класса.

    Protected :: Пользователи класса не могут получить доступ к защищенной переменной или методу, но могут быть доступны внутри подкласса, наследуемого от класса.

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

    03.09.2012

    6

    Область видимости с абстрактными примерами :: упрощает понимание

    Эта видимость свойства или метода определяется предварительным объявлением одного из трех ключевых слов (Public, protected и private).

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

    • Аннотация напр. Думайте о публичной видимости как о «публичном пикнике», на который может прийти любой желающий.

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

    • Считайте защищенную область видимости «пикником компании», куда допускаются члены компании и члены их семей, но не публика. Это наиболее распространенное ограничение объема.

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

    • используя аналогию с пикником, представьте себе «пикник компании, на который допускаются только члены компании». ни семья, ни широкая публика не допускаются.
    07.02.2014

    7
    /**
     * 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

    03.10.2013

    8

    ⚡️ Вот простой способ запомнить объем public, protected и private.

    PUBLIC:

    • public область действия: общедоступная переменная / функция доступна как для объектов, так и для других классов.

    PROTECTED:

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

    PRIVATE:

    • private область действия: частная переменная / функция видна только в текущем классе, в котором она определяется.
    • Нет! Класс, расширяющий текущий класс, не может получить доступ к этой области.
    • Нет! Объекты не могут получить доступ к этой области.

    Прочтите Visibility метода или переменной в Руководстве по PHP.

    30.06.2016

    9

    Принимая во внимание «когда»:
    Я склонен изначально объявлять все как частное, если я не совсем уверен. Причина в том, что сделать частный метод общедоступным обычно намного проще, чем наоборот. Это потому, что вы, по крайней мере, можете быть уверены, что частный метод не использовался нигде, кроме самого класса. Общедоступный метод может уже использоваться повсюду, что, возможно, потребует обширной перезаписи.

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

    Хорошей причиной для private метода может быть метод, который реализует что-то присущее этому объекту, что даже расширяющийся класс не должен изменять (фактическая причина, помимо инкапсуляции, например, управления внутренним состоянием). В конце концов, все еще достаточно легко отследить, где обычно используется protected метод, поэтому в настоящее время я по умолчанию использую protected. Допускаю, что не на 100% объективный опыт «в окопах».

    28.05.2012
  • С вашим обновлением: не могли бы вы более четко объяснить, насколько здесь сочетаются достаточно веская причина и веская причина? Например, использование private по-прежнему было бы достаточно хорошим для использования, но вы не предлагаете больше, хотя более ранние причины, которые вы указали, по-прежнему звучат как веская причина: инкапсуляция. 06.10.2013
  • @hakre: Причина, по которой мы должны стремиться к инкапсуляции, состоит в том, чтобы избежать утечки состояния во внешнюю область. protected это уже делает, но вы сохраняете гибкость для расширения / наследования. Опять же, если у вас нет веской причины сделать это private. 13.10.2017
  • Что ж, вероятно, в этом мы не согласны: protected на самом деле просачивается во внешнюю область видимости и часто мешает вам, поскольку он поддерживает плохие дизайнерские решения, такие как неявное предпочтение наследования, в то время как лучше отдавать предпочтение композиции. Вот почему придерживаться приватного, если у вас нет реальных требований, часто лучший способ начать писать код. Это также предотвратит слишком раннее принятие проектных решений, когда они на самом деле еще не нужны. 14.10.2017
  • Я не буду спорить с вашей общей точкой зрения, потому что это достаточно справедливо, но protected не проникает в внешнюю область (код, вызывающий / обращающийся к методу / полю), а только внутреннюю область (расширение классов) . Есть разница, сколь бы незначительной она ни была для вас. Гораздо легче отследить использование поля protected, чем public. 14.10.2017

  • 10

    Для меня это наиболее полезный способ понять три типа свойств:

    Общедоступный: используйте этот параметр, если вы согласны с прямым доступом к этой переменной и ее изменением из любого места в коде.

    Пример использования вне класса:

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

    Защищено: используйте это, если вы хотите заставить других программистов (и себя) использовать геттеры / сеттеры вне класса при доступе и установке переменных (но вы должны быть последовательны и использовать геттеры и сеттеры внутри класса). класс тоже). Это или private обычно используется по умолчанию для настройки всех свойств класса.

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

    Пример использования вне класса:

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

    Частное: private свойства очень похожи на protected. Но отличительная особенность / отличие состоит в том, что его private также делает его недоступным для дочерних классов без использования геттера или сеттера родительского класса.

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

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

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

    11

    Руководство по PHP хорошо прочитано по этому вопросу здесь.

    Видимость свойства или метода может быть определена с помощью префикса объявления ключевыми словами public, protected или private. Члены класса, объявленные общедоступными, доступны везде. Доступ к членам, объявленным защищенными, можно получить только внутри самого класса, а также унаследованных и родительских классов. К членам, объявленным как частные, может получить доступ только класс, определяющий член.

    05.12.2010

    12

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

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

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

    • private - Частные свойства и методы можно изменять сколько угодно. Никто другой не может их использовать. Это единственное, что вы можете изменить, не внося критических изменений.

    Или в терминах Semver:

    • Изменения чего-либо public или protected следует считать Существенными изменениями.

    • Все новое public или protected должно быть (как минимум) МИНУСОМ

    • Только новые / изменения чего-либо private могут быть ПАТЧОМ

    Так что с точки зрения поддержки кода хорошо быть осторожным с тем, что вы делаете public или protected, потому что это то, что вы обещаете своим пользователям.

    16.11.2016

    13

    Они предназначены для обеспечения различных уровней инкапсуляции

    05.12.2010
  • Вы, вероятно, могли бы немного конкретизировать это. 11.11.2016

  • 14

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

    Public: значения этих типов переменных доступны во всех областях и требуют выполнения вашего кода. объявить как: public $examTimeTable;

    Частный: значения этого типа переменной доступны только для того класса, к которому он принадлежит. private $classRoomComputers;

    Защищено: значения только этого класса и доступны только тогда, когда Доступ предоставлен в форме наследования или их дочернего класса. обычно используется :: для предоставления доступа родительскому классу

    protected $familyWealth;

    15.03.2013

    15

    Когда мы следуем объектно-ориентированному php в нашем проекте, мы должны следовать некоторым правилам для использования модификаторов доступа в php. Сегодня мы собираемся четко узнать, что такое модификатор доступа и как мы можем его использовать. Модификаторы доступа PHP используются для установки прав доступа с классами PHP и их членами, которые являются функциями и переменными, определенными в области действия класса. В php есть три области для членов класса.

    1. ПУБЛИЧНЫЙ
    2. ЧАСТНЫЙ
    3. ЗАЩИЩЕННЫЙ

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

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

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

    private: - члены класса с этим ключевым словом будут доступны внутри самого класса. мы не можем получить доступ к личным данным из подкласса. Он защищает членов от доступа извне класса.

    protected: - то же, что и private, за исключением разрешения подклассам доступа к защищенным членам суперкласса.

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

    18.01.2019

    16

    Public: это состояние по умолчанию, когда вы объявляете переменную или метод, к нему может получить доступ все, что угодно, прямо к объекту.

    Protected: Доступен только внутри объекта и подклассов.

    Private: На него можно ссылаться только внутри объекта, но не на подклассы.

    04.01.2016

    17

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

    private - только текущий класс будет иметь доступ к полю или методу.

    protected - только текущий класс и подклассы (а иногда и классы того же пакета) этого класса будут иметь доступ к полю или методу.

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

    03.12.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..