Пришел к Вам на канал после говнокурсов... Нет слов. За 3 видео узнал больше, чем за 2 месяца говнокурсов. Теперь Ваши видео + техдокументация и практика практика...
Большое спасибо. По поводу формулы из 1 делает 7 , вроде понял, но не понял. Пока не задался в итоге получить другое число и понять ( не без примера кто где что в памяти держит ) так и не понял бы . php учу вот пару дней по вашим урокам. Но вы правы пока сам не попробуешь а не просто скопируешь - оно получится но не поймешь до конца по чему
т.е. можно свести к тому, что $d++ + ++$d; читается как: сначала читаем $d и подставляем в выражение 1, затем изменяем на 1 (теперь $d = 2) "плюс" сначала изменяем $d на 1 (теперь $d = 3), затем читаем и подставляем в выражение. -> получим запись после подстановок $d += 1 + 3 и помним, что $d уже 3. значит имеем 3 += 1 + 3 что в итоге даст 7
Здравствуйте, Денис. Хорошо объясняете. Спасибо. Но в сложном примере (с инкрементом) немного напутали (это мое мнение): первый $d++ равен 2; ++$d равен 3; их сумма равна 5; теперь самая первая переменная $d равна 2 (так как "единица" повысилась в первом действии. Таким образом сумма =7
Да тут вообще х*йня какая то выходит чесс слово, не понимаю. Даже если взять просто пример $d++ + ++$d; то равно будет 3. Добавляется всего 2. И без разницы равно ли $d=10 то выйдет 12, даже если $d= 500 выйдет 502. Почему же не выходит 22 или 1002?? Думал как обычно пройдусь по основам php не тут то было. ------ Теперь возьмем пример автора, $d += $d++ + ++$d; если вместо $d=1 поставить $d=10 то выходит 34. А если теперь поставить пример $d += $d++ + $d++; выходит 33. Видимо автор прав с тем что цифра уходит в память и потом в момент (++d) начинает считать. Кароче х*й его знает, мне тут проект делать а я с этим сижу))
Пересмотрите внимательно, он правильно все объяснил. Первый $d++(постфиксная форма) равен 1, т.к. сначала идет подставление 1 вместо $d и только потом увеличение, но это увеличение не возвращается обратно к переменной, код идет дальше(направо) и поэтому значение первой переменной равно 1. Второй ++$d(префиксная форма) равен 3, т.к. до этой второй переменной интерпретатор увеличил ее значение до 2 и здесь это значение сразу увеличивается до 3(т.к. это префиксная форма) и мы получаем 1 + 3 = 4. Последнее значение переменной $d = 3, поэтому запись $d +=4(что равнозначно $d = $d +4) возвращает 7.
@@webQ я знаю:) у меня друг есть, который больше меня в программировании знает, но ему 13 лет. Блин ему и заказчики уже пишут, а мне никто не пишет и найти не могу :(
@@bistrec всему свое время. Пока есть возможность, поработайте на свои знания и навыки. Заказчики придут, когда придет имя. А имя придет, когда придут знания. Лучше потерять лишний год на поднятие своего уровня, чем пол жизни биться на фриланс биржах за копеечные проекты на wordpress
Еще допишу, что гораздо правильнее объяснить префиксную и постфиксну форму так: $d = 1; echo $d++; //будет 1, так первее идет возврат значения $d, а потом увеличение происходит, которое сохраняется в памяти в начальной переменной echo $d; //а вот тут уже будет 2 при обращении к переменной echo ++$d; //будет 2, так как увеличение происходит до возврата значения echo $d // будет 2 снова Мож кому пригодится, так лучше объяснено. Вообще подробно просто по инфе о Операторы инкремента и декремента
ПОЧЕМУ В ПРОДАКШЕНЕ НЕ ИСПОЛЬЗУЕТСЯ ОПИСАНОЕ ВЫРАЖЕНИЕ(ИНКРЕМЕНТ + ДЕКРЕМЕНТ) ? ГДЕ ВОЗМОЖНО ПРИМЕНИТЬ ТАКОЕ ВЫРАЖЕНИЕ (ТЕОРЕТИЧЕСКИ). НУ К ПРИМЕРУ ДАЖЕ ЕСЛИ ВЗЯТЬ ДРУГОЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ?
Не инкремент плюс дикремент, а выражения с неявным приоритетом операторов. В связи с тем что сайт может обслуживать программист и сильный программист, но который, в качестве профилирующего языка будет знать другой язык и с другим приоритетом операторов
Остаток от деления, как и во всех языках, это знак %, а, простите, в каком то языке есть оператор целочисленного деления? На сколько мне известно есть функции округления, но не операторы
@@СергейПресняков-о4р да, посмотрел сейчас, действительно в python есть такой оператор, в php из коробки его нет. Но достаточно будет привести результат к целочисленному типу и тогда дробная часть отбросится или можно округлить в меньшую сторону при помощи функции floor
Здравствуйте. Из видео получается, что ниже приведенные примеры идентичны. Но в первом случае результат 7, а во втором 6. $d += $d++ + ++$d; $d = $d + $d++ + ++$d;
@@webQ, фу-у-у, разобрался. По-своему конечно, но работает. В первом случае (не забываем, что пример с $d = 1), я считаю так: приоритет у меня после знака = и получается что 1+1=2. Далее я решил, что PHP присвоил результат 2 всем 3-м переменным $d, потому что они все одинаковые, то есть '$d'. Потом я умножил 2 на 3, потому что написанных у нас переменных $d 3 шт., а одна зашифрована, сокращена и вот этой он не присваивает 2, а остается 1. И как итог - 7. То есть 2*3+1. И эта зашифрованная всегда остается 1-й, даже, если присвоить переменной $d 32. Дальше я вместо 1 присвоил 3 и посчитал по тому же принципу и угадал - 13. Ведь 3+1=4. Теперь все три переменные становятся 4-ми. Умножаем на три получаем 12 и плюсуем зашифрованную 1. Далее присвоил переменной -1. Результат конечно же -1. Ведь -1+1=0. 0*3 и плюсуем 1. Второй вариант проще. Приоритет после первого плюса. С третьей переменной считаю. К примеру, переменной присвоил 2. Итак, 2+1=3. И дальше просто * на три. Переменную до знака = не трогаю. И результат - 9. Смешно конечно как я считаю, но главное могу понять, каким может быть результат.
Разобрался со вторым случаем: Для наглядности запишу в разные переменные результат = x + y + z php сначала рассматривает первую часть x + y ($d + $d++) из этого выражения сначала $d++ ( y = 1, но $d уже становится 2) из этого выражения следует: $d + 1 (где $d = 2) значит (2 + 1) (x + y) Дальше рассматривается z (++$d) $d = 2 , значит z = 3 результат = 2 + 1 + 3 = 6
преинкремент (сначала изменяем переменную, потом читаем) лучше всего было объяснить на примере: $d = 1; $c = ++$d; суть этого оператора, что после этой строчки $c имеет такое же значение как и $d, т.е. со значением 2. другими словами, прежде чем интерпретатору получить значение для $c он должен его вычислить для $d. В свою очередь, постинкремент (сначала читаем переменную, затем изменяем) делает так, что $c будет иметь значение 1, тогда как $d будет 2. Т.е. сначала читает для $c значение из $d, затем изменяет $d. $d = 1; $c = $d++; т.е. тут мы получим $c со значением 1. Можно еще иначе, кому все еще не понятно. порядок интерпретации выражения -> слева направо. представим два плюса ++ как выражение ($d=$d+1). И теперь мы можем записать выражение иначе: $c = ($d=$d+1)$d; - т.е. интерпретатор сначала должен выполнить скобки (это не валидная запись, просто для понимания), и лишь потом взять ЗНАЧЕНИЕ переменной $d, которое к этому моменту уже 2, значит в $c пойдет 2. и второй пример, $c = $d($d=$d+1); - т.е. интерпретатор уже может взять ЗНАЧЕНИЕ переменной $d, которое к этому моменту еще 1 (напомню это второй пример), и лишь затем проведет операцию в скобках, т.е. увеличит значение $d. именно поэтому во втором примере $c будет 1.
Мож пригодится кому, а то во время объяснений не совсем понял, додумывал. Посмотрев пример с d++ я понял какая это дичь, это в примере не тоже самое, что просто d+1. Не сразу догнал, то вывод сделал, что когда $d = 1; $d++; var_dump($d); Будет равен 2, но выше в самой строчке значение не обновляется, там будет 1. $++d; var_dump($d); Тут же в итоге будет тоже 2, но выше в строчке он обновляется на месте и там будет 2. И поэтому: $d = 1; (2) (3) $d = $d + ($d++ + ++$d); (упростил его) В общем при первом действии в скобках будет 2 и верхняя переменная обновится, но в строчке она не обновилась и там 1 остался, а далее второе слагаемое наоборот в строчке обновится, взял 2 как начальное значение, увеличим на 1 и выйдет 3 и на месте обновился и $d = 3 стало выше. И выйдет 3 + (1+3) = 7. Так если изменить пример: $d = $d + (++$d + ++$d); То тут всё будет обновлятся в строке прям, 3 + (2 + 3) = 8 Так и $d = $d + ($d++ + $d++); 3 + (1 + 2) = 6 Мож кому пригодится, чтоб понять, но я честно сам не понял на кой в этом разбираться. Но так проще использовать именно ++d, так просто понятнее, что оно обновляется на месте и ведет себя как d+1
Пришел к Вам на канал после говнокурсов... Нет слов. За 3 видео узнал больше, чем за 2 месяца говнокурсов. Теперь Ваши видео + техдокументация и практика практика...
пишу для поддержки канала и автора. спасибо за труд
самое лучшее что я видел из уроков, спасибо тебе
И Вам спасибо за хороший отзыв
Спасибо за урок! Классный пример ))) Люблю такие
Надеюсь что и более сложные темы смог донести, более менее, понятно
Большое спасибо. По поводу формулы из 1 делает 7 , вроде понял, но не понял. Пока не задался в итоге получить другое число и понять ( не без примера кто где что в памяти держит ) так и не понял бы . php учу вот пару дней по вашим урокам. Но вы правы пока сам не попробуешь а не просто скопируешь - оно получится но не поймешь до конца по чему
Шяс блин выучу php за 1 день )))
Спасибо за уроки , скачал ваш плейлист смотрю в оффлайне
Не знал, что у += низкий приоритет. Мелочь, но приятно. Спасибо за урок.
Большое спасибо за ваш труд и ваши объяснения!
Thank you very much!
Nichts zu danken)))))
Все ясно и лаконично.
Урок супер, спасибо)
👍👑
т.е. можно свести к тому, что $d++ + ++$d; читается как:
сначала читаем $d и подставляем в выражение 1, затем изменяем на 1 (теперь $d = 2) "плюс" сначала изменяем $d на 1 (теперь $d = 3), затем читаем и подставляем в выражение. -> получим запись после подстановок
$d += 1 + 3
и помним, что $d уже 3. значит имеем 3 += 1 + 3 что в итоге даст 7
Спасибо за урок !!
супер!!)) интересный урок ! кстати в js ответ будет 5))) Спасибо за урок !!
Да, абсолютно верно и Вы большой молодец если Вы это знали, не прогнали для галочки,или если прогнали, но поняли почему))))
Здравствуйте, Денис. Хорошо объясняете. Спасибо. Но в сложном примере (с инкрементом) немного напутали (это мое мнение): первый $d++ равен 2; ++$d равен 3; их сумма равна 5; теперь самая первая переменная $d равна 2 (так как "единица" повысилась в первом действии. Таким образом сумма =7
Да тут вообще х*йня какая то выходит чесс слово, не понимаю. Даже если взять просто пример $d++ + ++$d; то равно будет 3. Добавляется всего 2. И без разницы равно ли $d=10 то выйдет 12, даже если $d= 500 выйдет 502. Почему же не выходит 22 или 1002?? Думал как обычно пройдусь по основам php не тут то было.
------
Теперь возьмем пример автора, $d += $d++ + ++$d; если вместо $d=1 поставить $d=10 то выходит 34.
А если теперь поставить пример $d += $d++ + $d++; выходит 33. Видимо автор прав с тем что цифра уходит в память и потом в момент (++d) начинает считать. Кароче х*й его знает, мне тут проект делать а я с этим сижу))
Логично
Пересмотрите внимательно, он правильно все объяснил. Первый $d++(постфиксная форма) равен 1, т.к. сначала идет подставление 1 вместо $d и только потом увеличение, но это увеличение не возвращается обратно к переменной, код идет дальше(направо) и поэтому значение первой переменной равно 1. Второй ++$d(префиксная форма) равен 3, т.к. до этой второй переменной интерпретатор увеличил ее значение до 2 и здесь это значение сразу увеличивается до 3(т.к. это префиксная форма) и мы получаем 1 + 3 = 4. Последнее значение переменной $d = 3, поэтому запись $d +=4(что равнозначно $d = $d +4) возвращает 7.
@@dasman6163 Тысяча чертей!!! Лайк автору @dasman 616 , объяснил доходчивее чем автор видео! Двигаем в топы!
да он правильно разъяснил как работает интерпретатор, а так респект , нормально обьясняет
Спасибо
Пожалуйста
Добил 100 лайков :)
Спасибо большое
@@webQ всегда рад помочь коллеге :) хоть мне и 13 лет
@@bistrec возраст - не показатель человека и его знаний
@@webQ я знаю:) у меня друг есть, который больше меня в программировании знает, но ему 13 лет. Блин ему и заказчики уже пишут, а мне никто не пишет и найти не могу :(
@@bistrec всему свое время. Пока есть возможность, поработайте на свои знания и навыки. Заказчики придут, когда придет имя. А имя придет, когда придут знания. Лучше потерять лишний год на поднятие своего уровня, чем пол жизни биться на фриланс биржах за копеечные проекты на wordpress
Еще допишу, что гораздо правильнее объяснить префиксную и постфиксну форму так:
$d = 1; echo $d++; //будет 1, так первее идет возврат значения $d, а потом увеличение происходит, которое сохраняется в памяти в начальной переменной
echo $d; //а вот тут уже будет 2 при обращении к переменной
echo ++$d; //будет 2, так как увеличение происходит до возврата значения
echo $d // будет 2 снова
Мож кому пригодится, так лучше объяснено. Вообще подробно просто по инфе о Операторы инкремента и декремента
ПОЧЕМУ В ПРОДАКШЕНЕ НЕ ИСПОЛЬЗУЕТСЯ ОПИСАНОЕ ВЫРАЖЕНИЕ(ИНКРЕМЕНТ + ДЕКРЕМЕНТ) ? ГДЕ ВОЗМОЖНО ПРИМЕНИТЬ ТАКОЕ ВЫРАЖЕНИЕ (ТЕОРЕТИЧЕСКИ). НУ К ПРИМЕРУ ДАЖЕ ЕСЛИ ВЗЯТЬ ДРУГОЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ?
Не инкремент плюс дикремент, а выражения с неявным приоритетом операторов. В связи с тем что сайт может обслуживать программист и сильный программист, но который, в качестве профилирующего языка будет знать другой язык и с другим приоритетом операторов
приоритет серьёзный в php
А тут есть операторы "целочисленное деление" и "остаток от деления"?
Остаток от деления, как и во всех языках, это знак %, а, простите, в каком то языке есть оператор целочисленного деления? На сколько мне известно есть функции округления, но не операторы
@@webQ Ну в python есть //, вроде даже в С такое есть, давно его пробовал, не берусь наверняка утверждать.
@@СергейПресняков-о4р да, посмотрел сейчас, действительно в python есть такой оператор, в php из коробки его нет. Но достаточно будет привести результат к целочисленному типу и тогда дробная часть отбросится или можно округлить в меньшую сторону при помощи функции floor
Здравствуйте. Из видео получается, что ниже приведенные примеры идентичны. Но в первом случае результат 7, а во втором 6.
$d += $d++ + ++$d;
$d = $d + $d++ + ++$d;
потому что разный приоритет выполнения операций. Первый пример в javascript вообще ответ 5 даст))))
@@webQ, спасибо. Попробую разобраться.
@@webQ, как же описать для легкого понимания приведенные примеры, чтобы можно понять как что работает?
@@webQ, фу-у-у, разобрался. По-своему конечно, но работает. В первом случае (не забываем, что пример с $d = 1), я считаю так: приоритет у меня после знака = и получается что 1+1=2. Далее я решил, что PHP присвоил результат 2 всем 3-м переменным $d, потому что они все одинаковые, то есть '$d'. Потом я умножил 2 на 3, потому что написанных у нас переменных $d 3 шт., а одна зашифрована, сокращена и вот этой он не присваивает 2, а остается 1. И как итог - 7. То есть 2*3+1. И эта зашифрованная всегда остается 1-й, даже, если присвоить переменной $d 32. Дальше я вместо 1 присвоил 3 и посчитал по тому же принципу и угадал - 13. Ведь 3+1=4. Теперь все три переменные становятся 4-ми. Умножаем на три получаем 12 и плюсуем зашифрованную 1. Далее присвоил переменной -1. Результат конечно же -1. Ведь -1+1=0. 0*3 и плюсуем 1. Второй вариант проще. Приоритет после первого плюса. С третьей переменной считаю. К примеру, переменной присвоил 2. Итак, 2+1=3. И дальше просто * на три. Переменную до знака = не трогаю. И результат - 9. Смешно конечно как я считаю, но главное могу понять, каким может быть результат.
Разобрался со вторым случаем:
Для наглядности запишу в разные переменные
результат = x + y + z
php сначала рассматривает первую часть x + y ($d + $d++)
из этого выражения сначала $d++ ( y = 1, но $d уже становится 2)
из этого выражения следует: $d + 1 (где $d = 2) значит (2 + 1) (x + y)
Дальше рассматривается z (++$d)
$d = 2 , значит z = 3
результат = 2 + 1 + 3 = 6
Угарнул с примера)
Пхп настолько хороший и прибыльный язык, что почти везде ставится доллар😂
преинкремент (сначала изменяем переменную, потом читаем) лучше всего было объяснить на примере:
$d = 1;
$c = ++$d;
суть этого оператора, что после этой строчки $c имеет такое же значение как и $d, т.е. со значением 2. другими словами, прежде чем интерпретатору получить значение для $c он должен его вычислить для $d.
В свою очередь, постинкремент (сначала читаем переменную, затем изменяем) делает так, что $c будет иметь значение 1, тогда как $d будет 2. Т.е. сначала читает для $c значение из $d, затем изменяет $d.
$d = 1;
$c = $d++;
т.е. тут мы получим $c со значением 1.
Можно еще иначе, кому все еще не понятно. порядок интерпретации выражения -> слева направо. представим два плюса ++ как выражение ($d=$d+1). И теперь мы можем записать выражение иначе:
$c = ($d=$d+1)$d; - т.е. интерпретатор сначала должен выполнить скобки (это не валидная запись, просто для понимания), и лишь потом взять ЗНАЧЕНИЕ переменной $d, которое к этому моменту уже 2, значит в $c пойдет 2.
и второй пример,
$c = $d($d=$d+1); - т.е. интерпретатор уже может взять ЗНАЧЕНИЕ переменной $d, которое к этому моменту еще 1 (напомню это второй пример), и лишь затем проведет операцию в скобках, т.е. увеличит значение $d. именно поэтому во втором примере $c будет 1.
А, ну, наверное, Ваше объяснение именно понятно... Я не понял, но, наверное, новичкам зайдет.... Надеюсь...
Мож пригодится кому, а то во время объяснений не совсем понял, додумывал.
Посмотрев пример с d++ я понял какая это дичь, это в примере не тоже самое, что просто d+1. Не сразу догнал, то вывод сделал, что когда
$d = 1;
$d++;
var_dump($d); Будет равен 2, но выше в самой строчке значение не обновляется, там будет 1.
$++d;
var_dump($d); Тут же в итоге будет тоже 2, но выше в строчке он обновляется на месте и там будет 2.
И поэтому: $d = 1; (2) (3)
$d = $d + ($d++ + ++$d); (упростил его) В общем при первом действии в скобках будет 2 и верхняя переменная обновится, но в строчке она не обновилась и там 1 остался, а далее второе слагаемое наоборот в строчке обновится, взял 2 как начальное значение, увеличим на 1 и выйдет 3 и на месте обновился и $d = 3 стало выше. И выйдет 3 + (1+3) = 7.
Так если изменить пример:
$d = $d + (++$d + ++$d);
То тут всё будет обновлятся в строке прям, 3 + (2 + 3) = 8
Так и $d = $d + ($d++ + $d++); 3 + (1 + 2) = 6
Мож кому пригодится, чтоб понять, но я честно сам не понял на кой в этом разбираться. Но так проще использовать именно ++d, так просто понятнее, что оно обновляется на месте и ведет себя как d+1
Спасибо