Я могу переопределить константу в PHP без ошибки - PullRequest
0 голосов
/ 29 июня 2019

Как я знаю, мы не можем переопределить константу в PHP.Поэтому, если я сделаю:

define("DEVELOPMENT", true);

теоретически, я не могу переопределить его, используя:

define("DEVELOPMENT", false); (or) const DEVELOPMENT = false;

Проблема в PHP, позвольте мне сделать это.Это позволяет мне переопределить константу без каких-либо ошибок.Ошибка отображения включена (я получил любую другую ошибку):

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Что сделать, чтобы константы не могли быть переопределены, и чтобы я мог получить ошибку, если я попытаюсь?

Моя версия PHP - 7.2+0,17

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Нет ошибки, но есть уведомление.

Примечание: постоянное РАЗВИТИЕ уже определено

Вот почему важно никогда не выключать уведомление.

error_reporting(E_ALL); // E_ALL reports all problems including notices, warnings and deprecations

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

define("DEVELOPMENT", true);
define("DEVELOPMENT", false);

var_dump(DEVELOPMENT); // prints out bool(true)

Попробуйте онлайн: https://3v4l.org/7i8XL

Это может не быть большой проблемой, если у вас небольшой персональный проект, но поскольку константы всегда находятся в глобальном пространстве имен, в большом проекте с множеством внешних зависимостей некоторые константы могут конфликтовать друг с другом. Если у вас включены уведомления PHP, вы можете увидеть эту проблему быстрее. Другой вариант - всегда создавать правильно именованные константы, имена которых вряд ли будут конфликтовать с другими константами.

define("MY_COOL_LIBRARY_DEVELOPMENT", false);
0 голосов
/ 29 июня 2019

Чтобы сообщить все ошибки php

error_reporting(E_ALL);

Чтобы сообщить обо всех php-ошибках, кроме уведомлений

error_reporting(E_ALL & ~E_NOTICE);

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

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Вы говорите PHP не сообщать о каких-либо уведомлениях или предупреждениях. Вы должны удалить их.
Чтобы получить все предупреждения и уведомления, используйте

error_reporting(E_ALL);

Для получения дополнительной информации обратитесь к официальному doc и ознакомьтесь с примерами.

...