Константы класса PHP - общедоступные, частные или защищенные? - PullRequest
42 голосов
/ 22 декабря 2010

Правильно ли я считаю, что свойства const автоматически становятся открытыми? Есть ли способ сделать их частными или защищенными?

Заранее спасибо.

Ответы [ 4 ]

37 голосов
/ 22 декабря 2010

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

Начиная с PHP 7.1, они остаются открытыми по умолчанию, но модификаторы доступа могуттеперь будет применяться .Вот пример из заметок о выпуске:

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
18 голосов
/ 24 октября 2012

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

Было бы неплохо знать, что изменение частной константы ТОЛЬКО повлияет на класс, в котором она определена. К сожалению, у нас нет этой опции.

Вспомните, когда вы изучали объектный дизайн и анализ ... вы предоставляете методам и атрибутам классов максимально возможный ОГРАНИЧЕННЫЙ доступ, а затем ослабляете их по мере необходимости (гораздо труднее вернуться назад, потому что другие классы / код запускаются используя их, что затем нарушит другой код).

1007 * Временное решение *

Лучше всего просто создать личную или защищенную переменную и прописные буквы, чтобы показать, что это константа. Вы всегда можете создать класс с именем константа ($ value_to_be_constant), который реализует правильные магические методы / интерфейсы spl для предотвращения его изменения.

6 голосов
/ 17 сентября 2016

Мне известно, что этому вопросу 6 лет

Php 7.1 (в настоящее время RC1) позволяет указать видимость констант класса.

class Token {
        // Constants default to public
        const PUBLIC_CONST = 0;

        // Constants then also can have a defined visibility
        private const PRIVATE_CONST = 0;
        protected const PROTECTED_CONST = 0;
        public const PUBLIC_CONST_TWO = 0;

        //Constants can only have one visibility declaration list
        private const FOO = 1, BAR = 2;
}

Дополнительная информация

2 голосов
/ 13 ноября 2017

Начиная с php7.1 , вы можете определять свои константы класса с модификаторами доступа (public, private или protected).Посмотрите на следующий пример:

<?php
class superheroes{
    public const kal_el = 'Superman';
    protected const bruce_wayne = 'Batman'; # works php7.1 onwards
    private const anthony_stark = 'Iron Man'; # works php7.1 onwards

    public static function show_remaining(){
        echo self::bruce_wayne, '<br />';
        echo self::anthony_stark, '<br />';
    }
}
echo superheroes::kal_el, '<br />';
superheroes::show_remaining();

Кредиты: http://dwellupper.io/post/48/defining-class-constants-in-php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...