Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Сама операция определения выполняется довольно медленно, что подтверждается профилировщиком xdebug.
Вот тесты из http://t3.dotgnu.info/blog/php/my-first-php-extension.html :
pure 'define'
{{1 }} 380,785 выборок / сек
14,2647 средних констант msecs / first-response
, определенных с расширением hidef
930,783 выборок / сек
{{1} } 6.30279 mean msecs / first-response
обновление неработающей ссылки
Сообщение в блоге, указанное выше, покинуло Интернет. Его все еще можно просмотреть здесь через Wayback Machine . Вот еще одна похожая статья .
Библиотеки, на которые ссылается автор, можно найти здесь (apc_define_constants) и здесь (расширение hidef) .
Основные отличия:
Когда я запускаю тесты скорости, устанавливаемые константы и вышел выполненный очень немного быстрее, чем установка переменных и разгрузка их.
В целом идея константы состоит в том, чтобы быть постоянная , (Забавные звуки, правильно? ;)) в Вашем программа . Что означает, что компилятор (интерпретатор) заменит "FOOBAR" значением FOOBAR всюду по Вашему всему сценарию.
Так для теории и преимуществ - если Вы компилируете. Теперь PHP является довольно динамичным, и в большинстве случаев Вы не заметите другое, потому что Сценарий PHP компилируется с каждым выполнением. Afai-can-tell Вы не должны видеть заметные различия в скорости между константами и переменными, если Вы не используете кэш байт-кода такой в качестве APC, Оптимизатор Зенда или eAccelerator. Затем это может иметь смысл.
Все другие преимущества/недостатки констант были уже отмечены здесь и могут быть найдены в руководство .
PHPВот различия, от , руководство
Для меня, основное преимущество является глобальной областью видимости. Я, конечно, не волнуюсь об их эффективности - используют их каждый раз, когда Вам нужна глобальная скалярная величина, которая не должна быть изменяема.
Не уверенный в эффективности, но это больше, чем создает var:
php > $cat='';$f=microtime(1);$s='cowcow45';$i=9000;while ($i--){$cat.='plip'.$s.'cow';}echo microtime(1)-$f."\n";
0,00689506530762
php > $cat='';$f=microtime(1);define('s','cowcow45');$i=9000;while ($i--){$cat.='plip'.s.'cow';}echo microtime(1)-$f."\n";
0,00941896438599
Это повторяется с аналогичными результатами. Мне кажется, что константы определяются и / или используются немного медленнее, чем переменные.