Этот поток заставляет меня съежиться, потому что уже было "решение, отправленное", и это, во всех отношениях, неправильно. Давайте перечислим:
Определяет, действительно дороги в PHP. Вы можете взгляд это или тестировать его сами, но единственный эффективный способ определить глобальную константу в PHP через расширение. (Константы класса являются на самом деле довольно достойной мудрой производительностью, но это - спорный вопрос, из-за 2)
, Если Вы используете require_once()
соответственно, то есть, для включения классов, Вам даже не нужно определение; просто проверьте если class_exists('Classname')
. Если файл, который Вы включаете, содержит код, т.е. Вы используете его процедурным способом, нет абсолютно никакой причины, которая require_once()
должна быть необходимой для Вас; каждый раз, когда Вы включаете файл, Вы предполагаете для создания вызова подпрограммы.
Поэтому некоторое время, много людей действительно использовало class_exists()
метод для их включений. Мне не нравится он, потому что это - fugly, но у них было серьезное основание к: require_once()
было довольно неэффективно перед некоторыми более свежими версиями PHP. Но это было зафиксировано, и это - моя конкуренция, что дополнительный байт-код, который необходимо было бы скомпилировать для условного выражения и дополнительного вызова метода, безусловно перевесит любую внутреннюю проверку хеш-таблицы.
Теперь, подтверждение: этот материал жесток для тестирования на, потому что он составляет так мало времени выполнения.
Вот вопрос, о котором необходимо думать: включает, как правило, являются дорогими в PHP, потому что каждый раз интерпретатор поражает тот, который это должно переключить назад в режим синтаксического анализа, генерировать коды операций, и затем перейти назад. Если у Вас есть 100 +, включает, это определенно окажет влияние производительности. Причина, почему использование или не использование require_once являются таким важным вопросом, состоит в том, потому что это делает жизнь трудной для кэшей кода операции. объяснение этого может быть найдено здесь, но к чему это сводится, то, что:
, Если в течение времени синтаксического анализа, Вы знаете точно, что включает файлы, в которых Вы будете нуждаться для всей жизни запроса, require()
, те в самом начале и кэше кода операции обработают все остальное для Вас.
, Если Вы не выполняете кэш кода операции, Вы находитесь в твердом месте. Встраивание всего Вашего включает в один файл (не делайте этого во время разработки, только в производстве), может, конечно, помочь проанализировать время, но это - боль, чтобы сделать, и также, необходимо знать точно, что Вы будете включать во время запроса.
Автозагрузка является очень удобной, но медленной по причине, что логика автозагрузки должна быть выполнена каждый раз, когда включать сделано. На практике я нашел, что автозагрузка нескольких специализированных файлов для одного запроса не вызывает слишком много проблемы, но Вы не должны автоматически загружать все файлы, в которых Вы будете нуждаться.
, Если Вы имеете, возможно, 10, включает (это очень задняя часть вычисления конверта), весь этот wanking не стоит того: просто оптимизируйте свои запросы базы данных или что-то.
Если вы используете 8.1.5 и выше, вы можете использовать:
Для преобразования из шестнадцатеричного в десятичное:
select to_number('AA', 'xx') from dual;
Чтобы преобразовать десятичное число в шестнадцатеричное:
select to_char(111, 'xxxx') from dual;
FTA: Oracle to Decimal :
CREATE OR REPLACE FUNCTION hex2dec (hexnum IN CHAR) RETURN NUMBER IS
i NUMBER;
digits NUMBER;
result NUMBER := 0;
current_digit CHAR(1);
current_digit_dec NUMBER;
BEGIN
digits := LENGTH(hexnum);
FOR i IN 1..digits LOOP
current_digit := SUBSTR(hexnum, i, 1);
IF current_digit IN ('A','B','C','D','E','F') THEN
current_digit_dec := ASCII(current_digit) - ASCII('A') + 10;
ELSE
current_digit_dec := TO_NUMBER(current_digit);
END IF;
result := (result * 16) + current_digit_dec;
END LOOP;
RETURN result;
END hex2dec;
/
show errors
CREATE OR REPLACE FUNCTION num2hex (N IN NUMBER) RETURN VARCHAR2 IS
H VARCHAR2(64) :='';
N2 INTEGER := N;
BEGIN
LOOP
SELECT RAWTOHEX(CHR(N2))||H
INTO H
FROM dual;
N2 := TRUNC(N2 / 256);
EXIT WHEN N2=0;
END LOOP;
RETURN H;
END num2hex;
/
show errors
Начиная с Oracle8i, TO_CHAR и TO_NUMBER функции могут обрабатывать преобразования из основания 10 (десятичного) в основание 16 (шестнадцатеричное) и обратно:
SQL> select to_char(123,'XX') to_hex,
2 to_number('7B','XX') from_hex
3 from dual
4 /
TO_ FROM_HEX
------ -----------------
7B 123