[Homework] OOP - OOP In PHP - Септември 2014
Не много добре изпипано домашно
Не много добре изпипано домашно
Колега не е ли по-логично try-catch да са в BookingManager::bookRoom. На този метод работата му е да прави резервациите и ако има проблеми трябва да ги обработва и да изписва различни съобщения според случая.
Никъде не видях последната, част от домашното, където трябва да филтрираме стаите по различни критерии.
Друг съвет, който мога да ти дам е да използваш
function __autoload($className)
{
include_once("./" . $className . ".class.php");
}
по този начин няма да ти се налага да инклудваш всеки клас, по отделно.
Ето и моя вариант на домашното. Доста писане падна.
Ето и моето решение, но без последната подточка със звездичка, там вече се поуморих и ще мина на други задачи.
Здравейте, колеги
Включвам се малко късно, но доста писане падна по това домашно.
Не успях да направя само последната подточка на задачата.
Ще се радвам на някакъв feedback.
Поздрави, Даниел
Не знам за вас, но само на мен ли ми се струва, че условието е малко кофти написано? Трудно разбирам, къде се използват някои неща, а и Sample Input не ми помага много... или може би аз съм малко по-бавен :)?
Да кофти е написано, не се подразбира, трябва да се замислиш. Погледни моето решение или по-точно класовете за различните стаи.Мисля, че ще ти стане по-ясно.
Здравейте колеги. Задачката ми беше много интересна, но и да ви кажа честно доста време ми отне. Някак като че ли синтаксиса на езика ме затрудни най-много.
Приемам всякакви коментари, критики и др.
public function setReservations($reservations)
Този метод не е ли излишен? Мисля, че това което искаш да постигнеш манипулирайки резервациите се случва в addReservations(), а сетърът ти е излишен, даже опасен :)
P.S.: Прието е по PSR-2 стандарта, namespace-овете да не обграждат кода т.е. да незапочват и завършват с къдврави скоби, а със точка и запетая ";".
Идеята на { } блока е, в случай че имаш два неймспейса в един файл, което по PSR autoloading-а не трябва да се допуска.
namespace RoomData;
class Room
{
public function __construct() { }
}
Здравей, RoYaL.
Относно {} и namespace- напълно съм съгласна с теб. Може би е от недоглеждане от моя страна.
Що се отнася до сетването на резервацийте -най-вероятно си абсолютно прав. Имах проблем с пълненето на ареята с резервации и препрявах целия клас няколко пъти. Оставих го така, защото ми отне време да разбера къде ми е грешката и да накарам всичко да заработи. Признавам, че PHP ми е много слаба страна, но като ми остане време след изпита ще седна да си поиграя с тази задача.
Благодаря ти за отделеното време. :)
Здравейте,
Темата е от предишния випуск, но няма смисъл да пускам нова, затова пиша тук.
Получих преди малко коментар към домашното от лекцията и се получава малко сблъсък на виждания меджу моето мнение и това на проверяващия. Той/тя казва: "Стаята не трябва да проверява дали резервациите и се overlap-ват. Това е работа на BookingManager-а."
Според мен точно в стаята би следвало да се случва тази проверка. Стаята съдържа в себе си резервациите и тя е компетентна да прецени дали една резервация е валидна, т.е. да провери за овърлапване. Ако енджина го върши това, излиза, че той трябва да има достъп и да ползва резервациите на стаята и не ми се струва логично проверката да се прави там. Аз както видам нещата, енджина казва на стаята "добави си резервация" и тя го прави както си знае, като в нейния метод за добавяне на резервация тя проверява има ли конфликт със съществуваща или не.
Енджина може да проверява други неща - съществува ли такава стая, валидни ли са датите на резервацията (от гледна точка крайната дата да е след началната) (едит - това дето го задрасках пък трябва да си е работа на самия клас резервация) и такива неща.
Ако може някой по-опитен да разплете логиката, защото в това отношение сме си новаци.
П.С. Едно благодаря за колегата, който опита да ми обясни за spl_autoload-a. Не ми е все още много ясно, ще опитам по-късно пак да схвана как точно работи.
Както винаги Цецо Кърти Мивки! :) Имам една поправка и една препоръка. Недоглеждане е за класа Quest, който трябва да е Guest, също можеш да използваш $lastName вместо $secondName(това си е изцяло твоя работа, просто мисля, че обикновено се ползва фамилия, а second name е по-скоро за бащино). Препоръката е константи за броя на леглата в конструкторите на съответните стаи вместо магическите числа 1, 2 и 4. Иначе, честито на абонатите ти :)!
За аутолоудинга е по-добра практика да се ползва аутолоуд функцията от стандартната РНР библиотека:
http://stackoverflow.com/questions/10687804/how-to-use-spl-autoload-as-autoload-goes-deprecated
Колеги, благодаря за препоръките.
А относно Quest и Guest. Така се получава, когато се гледа филм и се решават задачи едновременно. .