|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2021-05-20 10:24 UTC] zmfw1991 at gmail dot com
Description:
------------
Semicolon after Control Structures.
Versions: php8.0.3, maybe php 5.3 and <5
Test script:
---------------
<?php
$arr = ['a', 'b', 'c', 'd'];
error_reporting(E_ALL);
/*----------------------------------------------
example 1
----------------------------------------------*/
echo "<h1>example 1:</h1>\r\n";
foreach ( $arr as $val ); // Semicolon after foreach! Errors not found!
{
echo $val . "<br>\r\n";
}
/*----------------------------------------------
example 2
----------------------------------------------*/
echo "<h1>example 2:</h1>\r\n";
function nope() {}
foreach ( $arr as $val);
nope();
{
echo $val . "<br>\r\n";
}
/*----------------------------------------------
example 3
----------------------------------------------*/
echo "<h1>example 3:</h1>\r\n";
if ( false );
{
echo 'true';
}
/*----------------------------------------------
WHY?
----------------------------------------------*/
echo
"
<h1>WHY?</h1>\r\n
Because <i>foreach</i> and <i>if</i> is Control Structures?<br>\r\n
These errors can be searched forever and never found. They are invisible.
";
?>
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 21:00:01 2025 UTC |
No. This is bug! [RU] Правильнее было бы определять это как синтаксическую ошибку и выдавать предупреждение, но php сейчас это не обнаруживает, он не замечает лишнюю точку с запятой после if () но перед {}. Здесь возможно неявное и непредсказуемое поведение, притом что врядли кто-то будет писать и ожидать корректного поведения от странных конструкции таких как: if( expression ); { code } При этом PHP волне обнаруживает синтаксическую ошибку здесь, на слове else: if ( false ); { echo 'true'; } else { echo 'true'; } Но если else не указан, то PHP промолчит. Я на поиск такой ошибки убил час, а PHP молчит как партизан, она очень незаметна и не бросается в глаза, но это ошибка всё же.