PHP: есть ли польза от написания строгого кода?

Когда я установил error_reporting(E_ALL | E_STRICT);мой код выдает Undefined variable ошибки. Я могу их решить, но мне интересно, есть ли разница в скорости или использовании памяти между написанием кода, который проходит строгие проверки, и простым переключением E_STRICT выкл?

3 ответа

Решение

Там нет механического преимущества. Вы, однако, защищены от выполнения действительно обычных, действительно глупых вещей, таких как не всегда инициализация переменной перед ее использованием - потому что с E_STRICT на, PHP будет генерировать ошибку вместо того, чтобы позволить функциям сломаться потенциально-катастрофическим и, вероятно, невидимым способом.

Например, вполне возможно, что приложение, поддерживаемое базой данных, использует переменную, которая не инициализируется всеми возможными путями выполнения:

// Adds an allergy to the user's records
public function Add($AllergyID) {
    $Patient = $this->Patient->Load();

    if ($Patient->Insurance->StartDate < now()) {
          $Allergies = $Patient->Allergies->Get();
          $Allergies[] = $AllergyID;
    }

    $Patient->Allergies->Set($Allergies);
}

В конце концов он не инициализируется, и чья-то таблица медицинских записей молча усекается.

Короче говоря, вы всегда должны развиваться со всеми предупреждениями: это ваша первая линия защиты. Однако, когда приходит время перевести ваш код в рабочий процесс, вам абсолютно необходимо отключить отчеты об ошибках . Вы не хотите, чтобы злонамеренные пользователи получали представление о внутренней работе вашего приложения или, что еще хуже, о вашей базе данных.

Преимущества в скорости нет, но при использовании PHP 5.2.0. или прежде чем использовать E_ALL | E_STRICT для целей разработки.

Но для PHP 5.2.0 выше E_STRICT включен в сам E_ALL.

Или вы можете использовать error_reporting(-1); Который всегда будет включать все, даже если они присутствуют в E_ALL.

используйте приведенный ниже вопрос stackru для дальнейшей справки. Каков рекомендуемый параметр error_reporting() для разработки? Как насчет E_STRICT?

Меньше ошибок приводит к лучшей скорости; ремонтопригодность будет увеличена; возможно, улучшение памяти тоже, потому что журнал не будет сброшен

Другие вопросы по тегам