PHP Complex Coditional Stetements. Задаване на променлива. Fruit Shop.
Здравейте, гледам лекциите на запис и затова не мога да задам въпроса на Боян Михайлов онлайн. В задача 07. Fruit Shop се създава променлива $price, на която се задава първоначална стойност -1.0. Разбирам идеята защо се създава и как след това се използва за отпечатване на "error". Не разбирам защо трябва да е с отрицателна стойност, още повече последващата проверка е дали $price >= 0. Защо не са задава първоначална стойност 0.0 или дори без стойност " "? Последващата проверка би могла да е дали $price == 0.0. Благодаря предварително!
Благодаря за отговора! Виждам, че аз самият съм допуснал грешка в изписването на въпроса. Предложениято ми е след " " e да се направи проверка дали $price > 0.0 (a не както съм написал $price == 0 ) Догаждах се, че празният стринг също има някаква стойност. Да, бих искал да знам защо 0.0 няма да работи правилно. Може би става дума за грешки при пресмятанията с реални типове?Ако е това, не се впускайте в сложни обяснения. Иначе би ми било интересно да видя двата Ви примера.
Решението би работило за задачата само в случай в който крайният резултат се смята при принтирането на отговора.
Ще го разпиша с "apple" и цена 1.
Това решение би работило правилно. Заради това, че ние смятаме цялата цена накрая когато е принтираме.
Проблема идва при решение от другия тип.
Сега най-вероятно ще ти мине пак идеята да сложим проверката на $price >= 0.0 и в този пример точно ще работи, но ако се върнем на предния пост може да видим, че това няма да работи коректно във вариантите в който не ни дават правилен плод или ден от седмицата.
Реално това което ти искаш да бъде направено може да се постигне когато $price не е дефинирана изобщо, но тогава се използват други похвати който не знам дали се изучават на този етап в курса. Ето един пример:
С isset може да проверим дали въобще такова нещо $price и ако не съществува изобщо директно изкарваме "error" защото никога не сме влезни в нито една проверка която дефинира $price.
Понеже тази задача се показва на хора и няма как да се знае по кое решение те ще тръгнат и изберат е най добре да бъде обяснено по начин, по който ще работи във всички решения. Това и главната причина в примера и в обяснението да е с -1
Идеята е винаги да се пише по начин който е най разбираем за всички и по който шанса за грешка се намалява максимално.
Здравейте,
Като цяло добрата практика подкрепя решението, в което $price не е дефинирана или има служебна стойност null, когато няма реална цена и се проверява с isset преди да се работи с променливата. isset проверява дали променливата съществува и дали тя е различна от null! Виж: http://php.net/manual/en/function.isset.php
Това предотвратява всякакви грешки свързани с нереални стойности на променливата, като празен стринг "", който се конвертира в 0 при числови изрази. По принцип, когато имаме език, в който типовете данни се конвертират автоматично един в друг, трябва да сме сигурни дали на входа имаме реални данни. По-правило добрата практика изисква да не променяме типа на данни на една променлива и затова е добре да ползваме null в такива случаи. В нашия случай за $price трябва да имаме null или някаква реална цена.
В заданието на задачата за служебна стойност е избрана отрицателна цена, което е друг подход при такъв тип задачи, където имаме множество проверки след това. Но това е частен случай, в който е ясно, че цената не може да е отрицателна. Може да имаме задача, в която отрицателните стойности и нулата да са съвсем реални като възможности, като координати на точка. Тогава подхода с null / isset би предотвратил всякаква неяснота.