Szkielet aplikiacji w php 7+ |
Szkielet aplikiacji w php 7+ |
3.08.2017, 11:46:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Dzień dobry
Napisałem bardzo prosty szkielet aplikiacji w php 7+ oparty na Symfony. Czy mógłbym prosić o ocenę, czy jest fachowo napisany? https://github.com/eerie79/framework_svn Mam następujące wątpliwości: 1. Czy jest sens kodować w php7 z użyciem "declare(strict_types = 1);"? 2. Jakiego typu zmienną jest rezultat funkcji "mysqli_query"? Jak zapisać to w php7? https://github.com/eerie79/framework_svn/bl...re/DataBase.php public function dbQuery(string $query): co_tu_podać? { return mysqli_query($this->mysqlLink, $query); } Pozdrawiam EERIE |
|
|
3.08.2017, 12:09:04
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
ad1) Moze wpierw dowiedz sie co robi declare(strict_types = 1); bo patrzac po kodzie odnosze wrazenie ze walisz gdzie popadnie nie wiedzac w ogole co to robi
I tak, jak najbardziej jest sens uzywania tego, a wrecz nawet by wypadało uzywac. ad2) Po co ci wlasna klasa DB skoro jak sam napisales oparles to o symfony? ps ad2) A tak poza tym to manuala zamkneli? Przeciez tam wyraznie napisane co zwraca: http://php.net/manual/en/mysqli.query.php Cytat Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
3.08.2017, 13:44:49
Post
#3
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Sorry. Skończyłem tylko jednoroczne studia podyplomowe. Nie nauczyli mnie tam wiele. Sam zdobywam wiedzę z książek i internetu...
Cytat ad1) Moze wpierw dowiedz sie co robi declare(strict_types = 1); bo patrzac po kodzie odnosze wrazenie ze walisz gdzie popadnie nie wiedzac w ogole co to robi I tak, jak najbardziej jest sens uzywania tego, a wrecz nawet by wypadało uzywac. No, deklaracja ta włącza tryb "strict". W praktyce sam musiałem wykonać rzutowanie typów zmiennych, bo wywaliło mi kupę błędów. Ale czy robię to dobrze? Np. najpierw pobieram postem wartość z formularza: $province = (is_numeric($_POST['province']) && $_POST['province'] >= 1) ? $_POST['province'] : 0; Potem dopiero w wywoływanej metodzie wykonuję rzutowanie: (int) $province $array = $addController->addAction($name, $surname, (int) $province, (int) $city); Czy nie da się jakoś zrobić, aby zmienna $province od razu była liczbą całkowitą, a nie łańcuchem? Czy robię to dobrze? Czy to znaczy, że deklarazji declare(strict_types=1); powiniennem używać we wszystkich plikach z kodem php? Sorry, nie spotkałem się z tym wcześniej... Cytat ad2) Po co ci wlasna klasa DB skoro jak sam napisales oparles to o symfony? Sorry... Nie oparłem to na Symfony, tylko wzorowałem się na Symfony. Jest to bardzo prosty szkielet aplikacji, który napisałem wzorując się na fremework'u symfony. Wszsytko napisałem możliwie najprościej i od podstaw. Cytat ps ad2) A tak poza tym to manuala zamkneli? Przeciez tam wyraznie napisane co zwraca: http://php.net/manual/en/mysqli.query.php Jaki typ zmiennej bym nie podał, że moja metoda zwraca, to wywala mi błąd. Podawałem "mysqli_result", ale wywala błąd, że nie mam takiej klasy. Jak sobie z tym poradzić? EERIE |
|
|
3.08.2017, 14:07:29
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
ad1) Chodzilo mi bardziej o kody takie jak ten
https://github.com/eerie79/framework_svn/bl...nfig/config.php tam declare jest raczej zbedne. Wszedzie indziej jak najbardziej. Rzutowanie rob juz na etapnie inicjalizcji zmiennej $province = (is_numeric($_POST['province']) && $_POST['province'] >= 1) ? (int) $_POST['province'] : 0; ad2) Nie mozesz tam okreslic typu jednoznacznie, poniewasz jak masz wyraznie napisane, to moze zwracac wiele typow, false/true, mysqli_result. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
3.08.2017, 16:03:11
Post
#5
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Poprawiłem rzutowanie. Mam jeszcze problem z klasą DataBase.
https://github.com/eerie79/framework_svn/bl...re/DataBase.php Dla metody dbQuary() zwracana wartość jest niejednoznaczna. Więc zostawić bez deklarowania zwracanego typu? public function dbQuery(string $query) { return mysqli_query($this->mysqlLink, $query); } Dla metody dbFetchArray() $result jest typu "mysqli_result", ale dostaję wtedy błąd, że nie ma takiej klasy. Gdzie ją znajdę? public function dbFetchArray(mysqli_result $result): array { return mysqli_fetch_assoc($result); } PS Pewnie rozwiązanie jest banalne, ale jakoś nie mogę na nie wpaść. EERIE |
|
|
3.08.2017, 16:11:11
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Zacznij czytac co pisze manual o funkcjach ktorych uzywasz
mysqli_fetch_assoc zwraca array lub NULL Generalnie ta twoja cala klasa do bazy dla mnie jest bez sensu bo wziales poprostu napisales dokladny wrapper na mysqli z funkcjami takimi samymi jakie ma mysqli. Ciezko w takim wypadku przypisac rozne typy zwrotow bo mysqli raz zwraca bool a raz cos innego w zaleznosci od sytuacji. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
3.08.2017, 16:32:49
Post
#7
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Więc jak w takiej sytuacji postepować, gdy metoda zwraca za każdym razem coś innego? Brak deklaracji zwracanego typu jest dopuszczalny? Bo dopiero zaczynam z php7 i nie mam zielonego pojęcia. Trudno o przykłady w necie...
|
|
|
3.08.2017, 17:35:06
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Cytat Brak deklaracji zwracanego typu jest dopuszczalny? Dopuszczalny przez kogo/co ? Przeciez w swoim kodzie nie raz nie masz ustawionego typu i jakos php7 pozwala ci na jego wykonywanie.Generalnie dobrze jest okreslac typ. To procentuje w przyszlosci. Jesli tak bardzo chcesz trzymac sie klasy w obecnej formie to stworz poprostu wlasna klase Result i za kazdym razem zwracaj jej obiekt, ktoremu to przypiszesz wynik funkcji mysqli. Zawsze bedziesz wiec zwracal obiekt klasy Result a co w nim bedzie to juz nikomu nic do tego edit: zas co do array, ktore raz moze byc array a raz null to nie : array a: : ?array -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
3.08.2017, 22:53:44
Post
#9
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Cytat Dopuszczalny przez kogo/co ? Przeciez w swoim kodzie nie raz nie masz ustawionego typu i jakos php7 pozwala ci na jego wykonywanie. Poprawiłem to i ustawiłem typ void, gdy wartość nie jest zwracana. Nadal mam problem z klasą DataBase (mysqli_result). https://github.com/eerie79/framework_svn/bl...re/DataBase.php Cytat Jesli tak bardzo chcesz trzymac sie klasy w obecnej formie to stworz poprostu wlasna klase Result i za kazdym razem zwracaj jej obiekt, ktoremu to przypiszesz wynik funkcji mysqli. Zawsze bedziesz wiec zwracal obiekt klasy Result a co w nim bedzie to juz nikomu nic do tego Trochę to zamieszane. Wolałbym prostrze rozwiązanie. Ale to chyba nie w tej wersji php. Czekam na sugestie odnośnie zmian w moim szkielecie aplikacji. Moim celem było stworzenie możliwie najprostrzego kodu php. Framework Symfony nie jest wcale taki łatwy do nauczenia. https://github.com/eerie79/framework_svn Pozdrawiam EERIE |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 04:00 |