Wpis z mikrobloga

Dzisiaj spotkałem się z taką sytuacją w #php
Otóż mam lokalnie zainstalowanego PHP7, na serwerze (nie produkcyjnym) mam PHP5.6. Zgłoszony został błąd, że nie mozna zapisać informacji. No więc szukam błędu lokalnie i wszystko działa. No ale postanowiłem zmienić wersję PHP na 5.6. No i okazało się, że rzeczywiście, mam Fatal Error przy zapisywaniu informacji w bazie danych.

Co powodowało błąd? Ano to, że mam taką metodę, która na podstawie klucza generuje nazwę metody, sprawdza czy metoda istnieje, jeżeli istnieje - ustawia wartość np. przekazuję

$entity->setField(['name' => 'mariecziek']);
Metoda setField sprawdzi czy w encji istnieje metoda setName, jeżeli istnieje - wywołaj metodę: setName('mariecziek')
No i miałem metodę setCurrency(Currency $currency), do której przekazywałem id waluty z formularza np. 1. To powodowało Fatal Error: expected Currency, int given.

Dlaczego, w PHP7, przekazując int - dane były zapisywane w bazie danych, a już w PHP5.6 miałem komunikat o błędzie, że typ danych się nie zgadza? Czyżby nowy feature w PHP7 - ignorowanie type hinting?

#php #webdev #doctrine
  • 9
@Vinniczek: Kod nie był na serwerze produkcyjnym, a na serwerze alpha, gdzie testujemy działanie kodu.
BTW. Gdybym chciał mieć tą samą wersję PHP do każdego projektu, to zabrakłoby mi miejsca, na kontenery dockera na dysku…
@Vinniczek: Oczywiście, że problem rozwiązany. Nadpisałem metodę setCurrency() w encji i wywaliłem typehinting. Chociaż mógłbym też zmodyfikować metodę setFields(), żeby pobierała typ danych parematru metody i przy pomocy getByReference(), szukała wpisu według id z parametru.

Otóż mam lokalnie zainstalowanego PHP7, na serwerze (nie produkcyjnym) mam PHP5.6.

Gdybym chciał mieć tą samą wersję PHP do każdego projektu, to zabrakłoby mi miejsca, na kontenery dockera na dysku


@mariecziek: a potem dziwić się że powstają żarty o programistach php ( ͡° ͜ʖ ͡°)