Может кто-нибудь дать мне вескую причину, почему assert в php ведет себя так, как он? - PullRequest
3 голосов
/ 15 марта 2009

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

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 15 марта 2009

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

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

1 голос
/ 15 марта 2009

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

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

...