while (list($key,$value)=each($array)) { echo $key . ' is ' . $value . "<br>"; }
?> Подскажите пожалуйста, каким образом красное условие равно true? То-есть если то, что внутри скобок вообще возможно обработать - то будет тру? То-есть в первые 3 раза конструкция list что-то делает, а на 4-ый раз значений в массиве уже нет - она не может ничего вывести и её воспринимают как FALSE? Извините если криво выразился.
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
moty писал(а):
на 4-ый раз значений в массиве уже нет - она не может ничего вывести и её воспринимают как FALSE?
Именно так, условие стоит while( list ) и если в его параметре будет не массив то он выдаст false a each даёт ему эти массивы по очереди (а как все отдаст то перестанет и list захлебнётся)
Member
Статус: Не в сети Регистрация: 04.06.2007 Откуда: Ростовская обл.
Здравствуйте, я тут взялся простенький сайт делать, хотел сам во всём разобраться, но возникают глупые вопросы, может ли кто нибудь с конференции проконсультировать по аське?
Вопрос 1: Потихоньку осваиваю PHP по учебнику, я так понимаю эти данные устарели?: На сервере, где я провожу свои издевательские и противочеловечекские эксперименты PHP версии 5.1.6 и сие не работает.
Цитата:
Присваивание по ссылке
Другой способ заключается в присваивании переменной ссылки на область памяти, занимаемую другой переменной. Вместо конкретного значения переменная-приемник связывается с указателем (или ссылкой) на область памяти, поэтому фактическое копирование не выполняется.
Чтобы присвоить значение по ссылке, укажите перед именем переменной-источника символ & (амперсанд):
$dessert = "cake";
$dessert2 = $Sdessert;
$dessert2 = "cookies";
print "$dessert2 <br>"; // Выводится строка cookies
print $dessert; // Снова выводится строка cookies
Как видно из приведенного фрагмента, после связывания переменной $dessert2 со ссылкой на область памяти, занимаемую переменной $dessert, любые изменения $dessert2 приводят к автоматической модификации $dessert (и всех остальных переменных, ссылающихся на эту же область памяти).
Вопрос 2 И это я так понимаю теперь тоже не работает?
Цитата:
В некоторых ситуациях бывает удобно использовать переменные, содержимое которых может динамически интерпретироваться как имя другой переменной. Рассмотрим типичный случай присваивания:
$recipe = "spaghetti";
Оказывается, строку "spaghetti" можно интерпретировать как имя переменной — для этого в команде присваивания перед именем исходной переменной ставится второй знак $:
$$recipe = "& meatballs";
Эта команда присваивает строку "& meatballs" переменной с именем "spaghetti". Следовательно, следующие две команды выводят одинаковые результаты:
print $recipe $spaghetti;
print $recipe $($recipe);
В обоих случаях будет выведена строка "spaghetti & meatballs".
Синтаксис с двумя баксами перед именем переменной просто прибавит к ней то, что будет после знака равно?
$value22 = $а - $b - $с; $value23 = ($а - ($b - $с)); echo " the result is $value22 second is $value23 ";
Выводит -55 и -45 Это вообще как работает? Читаем, значит, что написано в учебнике:
Цитата:
Операторы с правосторонней ассоциативностью и одинаковым приоритетом обрабатываются справа налево. Например, фрагмент
$с = 5;
$value = $а - $b - $с;
эквивалентен фрагменту
$c = 5;
$value = ($а - ($b - $с));
При обработке этого выражения переменным $value, $a, $b и $с будет присвоено значение 5. Это объясняется тем, что оператор присваивания (=) обладает правосторонней ассоциативностью.
Отлично, значит он каким то образом присваивает что-то куда-то, притом ему неважно присвоено другим переменным значения или нет?
Ничего не понимая я повторил сюжет из учебника как можно более точно:
вопрос 1 - на сколько я помню, работать должно вопрос 2 - нет, работает не так.
Цитата:
$param = "param2"; $$param = "value";
двойной доллар раскрывает переменную, т.е. в этом случае на месте $$param сначала получится $param2, а затем уже выполнится $param2 = "value"; вопрос 3 - в школе на уроке про приоритеты математических операций (кажется, 2 класс, когда умножение проходят) спал? в первом варианте 100 - 50 - 5 = 50 - 5 = 45 во втором варианте 100 - (50 - 5) = 100 - 45 = 55
то, что в скобочках, всегда выполняется перед другими операциями. умножение/деление всегда выполняется перед сложением/вычитанием.
вопрос 3 - в школе на уроке про приоритеты математических операций (кажется, 2 класс, когда умножение проходят) спал? в первом варианте 100 - 50 - 5 = 50 - 5 = 45 во втором варианте 100 - (50 - 5) = 100 - 45 = 55
то, что в скобочках, всегда выполняется перед другими операциями. умножение/деление всегда выполняется перед сложением/вычитанием.
обясните мне, почему он выводит отрицательныечисла. ибо я писал:
Цитата:
Выводит -55 и -45
Прописью : в первом варианте выходит минус пятьдесят пять, во втором варианте выходит минус сорок пять. Хотя должно выходить именно то, что написали вы.
В последнем-же примере в учебнике написано, что цитирую ещё раз дословно: (выделил жирным, что не так)
Цитата:
Операторы с правосторонней ассоциативностью и одинаковым приоритетом обрабатываются справа налево. Например, фрагмент
$с = 5;
$value = $а - $b - $с;
эквивалентен фрагменту
$c = 5;
$value = ($а - ($b - $с)); При обработке этого выражения переменным $value, $a, $b и $с будет присвоено значение 5. Это объясняется тем, что оператор присваивания (=) обладает правосторонней ассоциативностью.
Однако логика, математика, и выполнение кода подсказывают, что приведённые фрагменты, хоть ты убейся, не равны друг другу.
далее:
Цитата:
вопрос 1 - на сколько я помню, работать должно
Учебник, по которому я сейчас насилую вас, судя по всему оцифрован с бумаги, т.к. иногда вместо $ попадаются S, а вместо точек с запятой - двоеточия. Делаю ctrl+c ctrl+v из учебника. исправляю 2 S, заменяю из на $: слева код, справа - результат. #77
В итоге: 1. Я остался без печенек. 2. Не работает. Подскажите мне пожалуйста, где я что неправильно исправил?
код показывает отрицательные цифры или в ученике отрицательные? там все переменные правильно проинициализарованны? вообще, дурацкий какой-то учебник
Я попытался привести код в простейший вид, который мог, однако он по прежнему показывает -55 в качестве ответа... Я по своей неопытности и сонливости допускаю море синтаксических ошибок, проверьте пожалуйста, может я что-то где-то не так написал? #77 вот сам код:
Код:
<?php
$a = 100; $b = 50; $с = 5;
$value = $а - $b - $с; echo "$value";
?>
Возникает странное чувство, что $value, которое НУЛЛ, превращает $a в точно такой-же НУЛЛ, а затем уже от него отнимаются сначала 50, а потом и 5...
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
код показывает отрицательные цифры или в ученике отрицательные? там все переменные правильно проинициализарованны? вообще, дурацкий какой-то учебник
Я попытался привести код в простейший вид, который мог, однако он по прежнему показывает -55 в качестве ответа... Я по своей неопытности и сонливости допускаю море синтаксических ошибок, проверьте пожалуйста, может я что-то где-то не так написал? #77 вот сам код:
Код:
<?php
$a = 100; $b = 50; $с = 5;
$value = $а - $b - $с; echo "$value";
?>
Возникает странное чувство, что $value, которое НУЛЛ, превращает $a в точно такой-же НУЛЛ, а затем уже от него отнимаются сначала 50, а потом и 5...
валенок ты не надо пользоваться копипастом - буква "а" в выражении $value = $а - $b - $с; русская )) включи у себя отображение ошибок, ибо у меня пыхпых сразу ругнулся:
Notice: Undefined variable: а in F:\www\test.php on line 7 -55
включи у себя отображение ошибок, ибо у меня пыхпых сразу ругнулся:
Сервер не мой... И, вроде-бы ничего страшного в том, что не назначенные переменные существуют - не надо создавать переменных что-бы просто присуждать им значение нулл, ну кроме данного случая. Или так пишут только индусы? Сервер не мой, не могу такое включить... если ";" не находит - то говорит.. Кстати, вот я пользуюсь notepad++, а можно ли его или любой другой софт, заставить автоматически проверять правописание, например, расставленных и не расставленных ....эээ... знаков препинания? И, кстати, спасибо тебе, ToSHiC.
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
1. все эти настройки, связанные с диагностическими ошибками, можно в рантайме менять - http://php.net/manual/en/errorfunc.configuration.php 2. не страшно, но черевато бооооольшими косяками потом, это простейший способ взлома сайтов и т.д., в общем, сразу заруби себе на носу, что это очень плохо и некрасиво. 3. на счёт правописания не уверен, но попробуй зенд студио - http://www.zend.com/en/products/studio/ . оно вроде бы даже удалённый дебаг поддерживает. ну и в качестве тренировки - поставь себе на комп комплект из апача с мускулем и пхп - это легко, немножко мануалы только почитать. зато потом уже можешь играться с php.ini так, как тебе захочется
вариант для ленивых. имхо, устанавливая ручками, ты намного лучше поймёшь, как оно работает. потом пригодится, и не раз, когда будешь пытаться какие нибудь user friendly url делать или на хостинге будешь движок ставить, который требует определённых опций, .htaccess'ы править и т.д.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
ToSHiC писал(а):
поймёшь, как оно работает
Не поймёшь, ручная установка на самом деле не сложнее денверовской, просто инструкции написаны/переведены обычно глуповато и создаётся ощущение сложности...
Почему проверка заданны ли поля формы( выделена красным) после первого раза всегда ТРУ, даже если отправлять пустую форму? ( синяя вещь всегда выполняется)
// я конечно понимаю, что наверное надо быть последним идиотом, что-бы допустить такую ошибку, какую сделал я, но пожалуйста, не бейте меня, возможно я когда-нибудь напишу работающий код...
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения