Пять полезных встроенных PHP констант

Источник: «5 PHP Useful Built-in Constants»
В PHP есть множество встроенных констант. Некоторые из них полезны при работе с файлами, а некоторые — с целыми числами. Но все они имеют одну общую черту — все они доступны глобально. В этой небольшой статье мы рассмотрим типичные примеры и случаи использования констант в Laravel.

1. PHP_VERSION — быстрая проверка версии PHP

Как следует из названия, этот параметр возвращает текущую версию PHP. Это полезно при проверке совместимости текущей версии PHP с вашим приложением. Константа PHP_VERSION используется в HTTP-тестах Laravel:

public function testImageBmp()
{
$image = (new FileFactory)->image('test.bmp');

$imagePath = $image->getRealPath();

if (version_compare(PHP_VERSION, '8.3.0-dev', '>=')) {
$this->assertSame('image/bmp', mime_content_type($imagePath));
} else {
$this->assertSame('image/x-ms-bmp', mime_content_type($imagePath));
}
}

Эта константа возвращает строку наподобие этой: 8.3.0.

2. PHP_INT_MAX — Максимальное целочисленное значение

Если вам когда-либо требовалось найти максимальное целочисленное значение, вы, скорее всего, набирали что-то вроде 32412341241451 или искали его в интернете. Но в PHP для этого есть константа. Константа PHP_INT_MAX используется в Laravel Lottery:

protected static function resultFactory()
{
return static::$resultFactory ?? fn ($chances, $outOf) => $outOf === null
? random_int(0, PHP_INT_MAX) / PHP_INT_MAX <= $chances
: random_int(1, $outOf) <= $chances;
}

Константа PHP_INT_MAX вернёт максимальное целое значение — 9223372036854775807 на 64-битных системах. Это полезно при генерации случайного числа в диапазоне от 0 до максимального целочисленного значения.

3. __DIR__ — текущий каталог

Наша следующая константа отлично подходит, если вам нужно получить текущий каталог. Она используется в Laravel Model Make Command:

protected function resolveStubPath($stub)
{
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
? $customPath
: __DIR__.$stub;
}

Эта константа полезна, так как возвращает полный путь к текущему каталогу. Например, в моем случае:

/Users/modestasv/Projects/laraveldaily/php-constants

Теперь я могу узнать свой текущий каталог и использовать его для поиска других файлов.

4. DIRECTORY_SEPARATOR — разделитель каталогов

Эта константа полезна, когда вам нужно получить разделитель каталогов. Обычно вы можете вставить / в путь, но иногда это может не сработать (скорее всего, в Windows), и вы получите ошибку 500. Она используется в Laravel Lang Publish Command:

foreach ($stubs as $from => $to) {
$to = $langPath.DIRECTORY_SEPARATOR.ltrim($to, DIRECTORY_SEPARATOR);

if ((! $this->option('existing') && (! file_exists($to) || $this->option('force')))
|| ($this->option('existing') && file_exists($to))) {
file_put_contents($to, file_get_contents($from));
}
}

Константа DIRECTORY_SEPARATOR предотвращает ошибки и возвращает символы разделения пути, характерные для конкретной системы. В Linux/osX вернётся /, а в Windows — \.

5. PHP_EOL — конец строки

Последняя в нашем списке — PHP_EOL. Эта константа поможет вам, когда нужно добавить новую строку в создаваемый файл. Она автоматически возвращает правильный символ конца строки для вашей системы. Она встречается Laravel Controller Make Command:

protected function buildFormRequestReplacements(array $replace, $modelClass)
{
// ...

if ($storeRequestClass !== $updateRequestClass) {
$namespacedRequests .= PHP_EOL.'use '.$namespace.'\\'.$updateRequestClass.';';
}

return array_merge($replace, [
// ...
]);
}

Константа PHP_EOL возвращает \n в Linux/osX и \r\n в Windows, предотвращая ошибки и обеспечивая совместимость вашего кода со всеми системами.

Ещё PHP констант?

Мы рекомендуем вам ознакомиться с документацией PHP для получения дополнительной информации о константах:

Или, если вы чувствуете себя авантюристом, вы можете запустить это в своём локальном окружении:

<?php

print_r(get_defined_constants(true));

Этот код выведет все PHP константы, доступны в вашей системе.

Дополнительные материалы

Предыдущая Статья

Основы TypeScript: JavaScript в сравнении с TypeScript

Следующая Статья

Основы TypeScript: Примитивы и базовые типы