Внутренние php константы

257
09 июня 2017, 12:04

Где посмотреть список внутренних констант php?

Есть задание константы в коде:

define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 )

Что означает число -7? Я так понимаю - это какие-то внутренние значения php...

Answer 1

-7 — это код ошибки класса PclZip. Этот класс используется, например, вордпрессом. В файле wp-admin/includes/class-pclzip.php перечислены коды ошибок, возникающие при работе с архивами:

// ----- Error codes
//   -1 : Unable to open file in binary write mode
//   -2 : Unable to open file in binary read mode
//   -3 : Invalid parameters
//   -4 : File does not exist
//   -5 : Filename is too long (max. 255)
//   -6 : Not a valid zip file
//   -7 : Invalid extracted file size
//   -8 : Unable to create directory
//   -9 : Invalid archive extension
//  -10 : Invalid archive format
//  -11 : Unable to delete file (unlink)
//  -12 : Unable to rename file (rename)
//  -13 : Invalid header checksum
//  -14 : Invalid archive size

Но с числами удобно работать программам, а не людям. Человеку, чтобы понять смысл кода -7, надо рыться в документации или искать комментарии в файле.

Чтобы облегчить дело, в этом же файле заданы константы для всех кодов ошибок. Константам даны "говорящие" имена, чтобы их было легче запомнить:

define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
define( 'PCLZIP_ERR_MISSING_FILE', -4 );
define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
...

Теперь, чтобы отдать нужный код ошибки, можно не вспоминать число, а воспользоваться константой. Человек пишет в коде PCLZIP_ERR_BAD_EXTRACTED_FILE, а программа читает -7, и все довольны, что программа поняла человека.

А чтобы человек тоже понимал программу, всё в том же файле задана функция:

function errorName($p_with_code=false)
{
  $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
                    PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
                    PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
                    PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
                    PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
                    PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
                    PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
                    PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
                    PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
                    PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
                    PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
                    PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
                    PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
                    PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
                    PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
...

Тут вообще интересно. Слева программист написал "говорящие константы", чтобы ему самому было понятно, что он написал. Программа заменит их на числа и будет работать с числами. А справа задано, что должна сообщать программа, когда у неё проблемы. То есть, теперь вместо -7 в журнале ошибок будет PCLZIP_ERR_BAD_EXTENSION, и человек быстрее поймёт, что происходит.

Answer 2

Число "-7", внезапно, означает число "-7", не более того.

Любая константа используется в каком либо контексте. Может быть это код ошибки, может корректирующий коэффициент, может еще что-то. Если вам не нужно использовать эту константу, то и значение ее вам должно быть глубоко фиолетово(строго говоря, вам в принципе не должно быть интересно ее значение, на то она и определенная константа). Если же просто познание ради познания, то читайте документацию или вообще исходники

Конкретно в вашем случае это код ошибки.

PCLZIP_ERR_BAD_EXTRACTED_FILE:

  1. ERR - ошибка (ERROR)
  2. BAD - плохой
  3. EXTRACTED - извлеченный
  4. FILE - файл

Что-то связанное с тем, что извлеченный файл некорректен. Более подробно читайте в соответствующей документации.

READ ALSO
Как перевести массив байтов в строку UTF-8 в Visual C++

Как перевести массив байтов в строку UTF-8 в Visual C++

Имею массив байтов, байты в массив записаны в кодировке UTF-8, соответственно нужно как-то преобразовать байты в строку такой же кодировке,...

462
Как правильно вернуть *handle функцией

Как правильно вернуть *handle функцией

ЗдравствуйтеЕсть объявление структуры

246
Как в Qt 5.9 подключить драйвер MySql?

Как в Qt 5.9 подключить драйвер MySql?

Добрый день, пытаюсь подключиться к БД но в консоль выдаёт

581
Отследить, что и где обращается к элементу

Отследить, что и где обращается к элементу

Как можно отследить, какая функция обращается и что делает с каким-то элементом? У меня в проекте возник баг, суть которого заключается в том,...

258