Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Szkielet aplikiacji w php 7+
eerie
post 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
Go to the top of the page
+Quote Post
nospor
post 3.08.2017, 12:09:04
Post #2





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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

Go to the top of the page
+Quote Post
eerie
post 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. wink.gif

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
Go to the top of the page
+Quote Post
nospor
post 3.08.2017, 14:07:29
Post #4





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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

Go to the top of the page
+Quote Post
eerie
post 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ść. smile.gif

EERIE
Go to the top of the page
+Quote Post
nospor
post 3.08.2017, 16:11:11
Post #6





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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

Go to the top of the page
+Quote Post
eerie
post 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...
Go to the top of the page
+Quote Post
nospor
post 3.08.2017, 17:35:06
Post #8





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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 smile.gif



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

Go to the top of the page
+Quote Post
eerie
post 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. wink.gif

https://github.com/eerie79/framework_svn

Pozdrawiam
EERIE
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 09:59