- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Есть класс Error и метод display(), который получает в себя код ошибки (1 - фатальная, 2 - критическая, 3 - пользовательская, 4 - предупреждение) и если ошибка не фатальная, он вызывает статический метод внутри класса, который загружает константы описания ошибок из json файла. Так, же, метод display получает вторую переменную, которая как раз содержит константу описания этой ошибки. Когда языковые константы ошибок определены, метод display в зависимости от кода, должен вывести значение этой константы. Например,
Мы получили ошибку подключения к базе MySQL. Метод подключения тут же, запрашивает Error:display(2, MYSQL_ERROR). Метод парсинга языка, определяет константу LANG_MYSQL_ERROR и display выводит ее. Например, "Неизвестная ошибка подключения к базе данных".
Проблема в том, что когда я передаю название константы, я передаю ее как переменную. Как передать название константы в метод не как переменную или как хотя бы заставить ее интерпретировать при выводе не как (string) var, а как константу? Набросок кода ниже. Убрал лишнее, чтобы проблему было видно.
И еще вопрос по оптимизации скорости выполнения кода. Очень приелись константы, в качестве настроек и языковых значений. Не будут ли они работать хуже обычных глобальных массивов?
А чем переменная не устраивает? Не вижу здесь вообще никакого смысла использовать константы. Они для того и константы, что их значения подразумевается что будет константным.
siv1987, так у меня настройки и не должны меняться, а главное, должны быть кругом доступные. У глобального супермассива синтаксис неудобный, поэтому, конфиги и ленгы константами.
Меня интересует вопрос производительности и как заставить интерпретироваться константу. Например, я передаю ее название в переменной $a.
<?
$a = CONST;
define ('CONST', 'br');
echo $a; // выведет CONST. Как заставить выводить br??? Какое-то там (const) как в C есть???
?>
Например, я передаю ее название в переменной $a.
И какой здесь смысл?
define ('CONST', 'br');
$a = CONST;
echo $a;
siv1987, а смысл в том, что я изначально не знаю, какую константу мне надо вывести. Ее имя принимает метод из других классов и выводит ее. Вот как раз мне нужно, чтобы имя константы передавалось переменной? Смысл это уже мое дело. Стиль такой, что конфигурация и языковые константы должны быть константами и должны задаваться из файла json. Т.е., загрузились и усе. И дальше только для чтения и никто не может изменить ее значение. Т.е., никакие $conf['db_name'] = false уже не сработают, потому что будет CONF_DB_NAME. Ну вот представьте, загружу я конфиги в массив, буду каждом файле задавать их глобальными, обращаться к ним фиг каким именем, а тут CONF_DB_NAME и все. Но вот только значение этого, скажем, DB_NAME неизвестно, т.е. вывод констант динамический, хоть и константа статическая. Константу мы не трогаем, просто выводим в зависимости от ситуации. Ну не писать же мне для каждой константы switch.
$a = CONST;
echo $a;
Это сработает если константы уже заданы. Мне не надо передавать значение, потому что изначально константы для названия ошибок не загружаются. Надо передать только ее имя. А значение задается в самом методе. Т.е., зачем мне загружать константы ошибок, если не факт, что эта ошибка будет. Нужно по факту.
---------- Добавлено 27.05.2012 в 16:53 ----------
Пришлось, тело метода загрузки констант поместить в __construct. Так, при обращении к Error::display(название константы), константы уже автоматически загружены и интерпретируются прямо при запросе. Но все-равно, костыли это.
echo $a; // выведет CONST. Как заставить выводить br??? Какое-то там (const) как в C есть???
http://php.net/manual/ru/function.constant.php
echo constant($a);
Sigmo#ID, вы гений! Где только не спрашивал, никто не додумался написать это, только "а зачем тебе это", "а почему переменные не используешь". Спасибо большое. Проблема решена.