Может кто-нибудь дать мне вескую причину, почему assert в php ведет себя так, как он?

StackOverflow https://stackoverflow.com/questions/648237

  •  22-07-2019
  •  | 
  •  

Вопрос

Оператор assert в PHP ведет себя не так, как в большинстве других языков.

assert ('return false'); фактически оценивает строку и затем подтверждает ее результат (false).

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

Очень странно.

Моя проблема не в понимании поведения, моя проблема в том, чтобы найти вескую причину такого поведения, особенно. так как теперь вы должны выполнять дополнительную умственную работу мышления ... " это оценивает как строку? ".

Это было полезно?

Решение

  

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

от http://www.php.net/manual/en/function .assert.php

Другие советы

Я бы предположил , что это просто так, чтобы им не нужно было особый случай для конкретной части языка. Я считаю, что в PHP, если вы рассматриваете строку как выражение, она вычисляется автоматически. Таким образом, вы можете делать такие вещи, как просто передать имя функции и попытаться "вызвать" это и работает (указатели на функции без указателей :-P).

РЕДАКТИРОВАТЬ: см. ответ Якоба за соответствующую цитату из документации PHP об утверждении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top