При написании кода любой программист делает проверки. Это нормально :) Для генерации ошибок в PHP есть три механизма:error (собственно ошибки);
exception (исключения);
assertion (утверждения).
При написании кода и его последующем тестировании было обнаружено совершенно неочевидное поведение функции assert. А теперь немного кода:
<?php
// Предположим у нас есть перменная $x
$x = 'TEST';
// Теперь проверим как работает переменная если мы используем ее в условии
if ($test)
echo "В переменной что-то естьn";
// Код выведет текст "В переменной что-то есть"
// А теперь если сделать то же самое с assert
assert($x);
// Ассерт отработает нормально, но мы увидим ошибку PHP
// PHP Notice: Use of undefined constant TEST - assumed 'TEST' in php shell code(1) : assert code on line 1
Что же во всем этом плохого? А то, что в случае, когда в assert передается строка, интерпретатор будет пытаться выполнить ее аналогично eval, что дает огромный простор для различных уязвимостей, так как злоумышленник в некоторых случаях может получить возможность выполнить произвольный код.
<?php
$x = 'TEST';
assert('$x .= $x;');
echo $x; // TESTTEST
Документация функции assert.