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


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

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

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

Действительно очень странно.

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

 3
Author: fabrik, 2009-03-15

2 answers

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

Из http://www.php.net/manual/en/function.assert.php

 11
Author: Jakob Stoeck, 2009-03-15 18:12:18

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

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

 1
Author: Evan Teran, 2017-05-23 11:49:28