Код: PHP: if ( $input[0] == '/' && isset($input[1]) && $input[1] == '/' ) { $url = 'http:' . $url; } Иногда ругается так: Это значит $url пустое? Как поправить, проверкой на isset?
Вообщем у меня анонимайзер и если вводить ссылку так: http://site.ru то все ок, если ввести просто site.ru то он поправляет на http://site.ru сам, но в логах пишет такую ошибку..
не скажу про ссылку но вот это isset($input[1]) && $input[1] == '/' Фактически проверка на существование переменной трата ресурсов. Ты ее дальше проверяешь на соответствие символу, фактически две проверки одной переменой .. проверку на существование можно тупо выкинуть вообще. Ибо если переменной нет то и соответствовать символу она не будет.
Да и ты бы привел более полный код как ссылка формируется а то согласной этой строке: $url = 'http:' . $url; видно что часть формирования ссылки отсутствует. Точнее $url где то еще задействована ибо // тут никак не светятся.
MiksIr а для чего ? Мне просто интересно, ведь согласно синтаксису ПХП, переменная объявляется либо путем ее явного объявления либо путем присвоения ей значения. Он присваивает значение, по сути своей переменная должна быть объявлена и не может быть пустая, получается ошибка при присвоении данных ? Поправь если я не прав.
$url = 'http:' . $url; Слева до присваивания - не может быть пустая, а вот справа - вполне себе может быть пустая.
Какая разница, одна или нет. Объясняю на примере PHP: if ($_POST['url']) { $url = $_POST['url']; } ... $url = 'http://' . $url; $url справа может быть неопределена, так как эта переменная определяется только в одном месте - внутри if-а, который может и не выполниться.
Invision Написано дословно: PHP Notice: Undefined variable: url in /opt/lampp/htdocs/includes/init.php on line 529 ПЫХЫПЫ ЗАМИЧАНИЙЕ: НЕОПРЕДЕЛЕННАЯ переменная урл из чего можно сделать ДВА вывода: 1 - это не страшно, если ты спишь со спокойной совестью 2 - определи, блин, уже эту переменнуй. Что это значит? В английском языке слово define означает "определять". но в данном контексте требуется не определить, а задать изначальное дефолтное значение исходя из разумной бесопасности кода и его стабильности. Напомнило анекдот про "спили мушку". Решение: PHP: <? $url = ''; if ( $input[0] == '/' && isset($input[1]) && $input[1] == '/' ) { $url = 'http:' . $url; } Для спортсменов: при задании первого же значения $url происходит обращение к значению $url, которого на данный момент еще нет. Как результат, компилятор жалуется, что мол кто-то косякнул, ибо ему сказано: присвой этой переменной значение той переменной, значение которой НЕ ОПРЕДЕЛЕНО. Он говорит, что в душе не ипет какое у нее значение и по причине того, что за тебя он додумать не может, ляпает туда пустую строку. В нормальном языке программирования компилятор тебя бы просто послал. Однако в среде пхп, где в лог никто не смотрит, а ошибки отключены, такое поведение считается нормальным. А зря =)
igordata, спасибо тебе, ошибок вроде нет =) p.s А если выше переменная $url уже имела значение, она на пустую не поменяется?) Хотя это все в функции находится..
Охохо.... Область видимости внутри функции не позволит быть внешней переменной внутри функции. Т.е. переменная с таким же именем не получит "такого же" значения. Иначе бы все программисты умерли со страху, как же все их несчетные for($i... будут работать. С другой стороны удобно что все одинаковые for($i во всех функциях работают независимо но в функцию можно засунуть переменную через правильно узкое место () или через жопу