Может ли кто-нибудь дать мне вескую причину, почему assert в php ведет себя так, как он это делает?
Оператор assert PHP ведет себя не так, как большинство других языков.
assert('return false');
фактически оценивает строку, а затем утверждает ее результат (false).
Вместо сравнения параметра с true, он проходит дополнительный этап проверки аргумента, и если это строка, оценивающая его, затем выполняет сравнение.
Действительно очень странно.
Моя проблема не в понимании поведения, моя проблема в том, чтобы придумать вескую причину для этого поведение, особенно с тех пор, как вам теперь придется выполнять дополнительную умственную работу по мышлению... "соответствует ли это строке?".
2 answers
Преимущества строкового утверждения заключаются в меньших затратах, когда проверка утверждений отключена, и в сообщениях, содержащих выражение утверждения, когда утверждение завершается неудачей. Это означает, что если вы передадите логическое условие в качестве утверждения, это условие не будет отображаться в качестве параметра функции утверждения, которую вы, возможно, определили с помощью функции assert_options(), условие преобразуется в строку перед вызовом этой функции обработчика, а логическое значение FALSE преобразуется в значение пустая строка.
Я бы предположил, что это просто так, что им не нужно было использовать особый случай для определенной части языка. Я считаю, что в PHP, если вы обрабатываете строку как выражение, она вычисляется автоматически. Таким образом, вы можете делать такие вещи, как просто передавать имя функции и пытаться "вызвать" ее, и она работает (указатели на функции без указателей:-P).
РЕДАКТИРОВАТЬ: смотрите Ответ Якоба для соответствующей цитаты из документов PHP об assert.