wtorek, 25 kwietnia 2017

Dzień 33. i 34.

    Połączyłem oba dni w jeden wpis, bo wydaje mi się, że pojedyncze byłby za krótkie, a oba się ze sobą łączą. Tak więc, napisałem konwerter do Excela i przyszła próba na pierwsze uruchomienie. Od razu wyskoczył "zły duch Symfony" i czytam opis błędu. Obiekt nie może być użyty jako string, czyli jesteśmy w domu. Niby, bo zupełnie nie mam pojęcia czemu miałoby się to stać. No to bezczelnie ładuje tam metodę __toSring() z nadzieją, że coś mi wyświetli, ale niestety nic z tego. Szukam dalej, coś zmieniam nie tu gdzie trzeba, więc i błąd się zmienia, ale to wciąż nie to. Mija pewnie z godzina i po małej przerwie wracam do projektu i oto jest! Klasyczna, nazwijmy to literówka, bo już mi się ten błąd zdarzał i zawsze był ciężki do odnalezienia, a jeszcze tutaj była krótka nazwa. Otóż napisałem: $this->$em = $em zamiast $this->em = $em. Jeden mały dolar a taka różnica... Kłopotów to jeszcze nie koniec, bo teraz błąd zamienił się w oczekiwanie na array a otrzymanie obiektu. Znowu grzebię, szukam, sapię. Ekran mam usiany var_dumpami, wszędzie widzę te arraye. Sprawdzam metody w repozytorium i tam też niby zwracaj arraye, więc wtf? Otóż po którymś z kolei die'u i foreachu wreszcie widzę w tych var_dumpach, że owszem mam tablicę, tyle że tablicę obiektów, a metoda oczekuje tablicy tablic. Jeszcze raz zaglądam do repozytorium i widzę swoją ślepotę. Sprawdzam w podobnym pliku konwertera, tylko dla innej kategorii obiektu i tam całość napisana metodami na obiektach, a u mnie wszystkie dane wyciągane są z tablic. Sprawdzam kolejne i znowu wszystko na obiektach, a tylko w tym jednym pliku było na tablicach. Pytam więc autora, czemu ten jeden plik jest wyjatkowy, bo na nim bazowałem swój kod. Odpowiedź jest mi już znana, ale o tym zapomniałem. W tym wyjątkowym przypadku, liczba obiektów była tak duża, że dużo szybciej było wykonywać operacje na tablicach. No to teraz jesteśmy w domu - znaczy mam pół kodu do przepisania. Mógłbym niby dodać nową metodę do repozytorium, ale stwierdziłem, że chcę mieć całość zrobioną metodami obiektowymi, a nie jakieś kawałki. Ta zmiana była w miarę szybka i pewnie po pół godzinie miałem już gotowy arkusz Excela, który wyświetlał dane.
    Dzień później poprawiłem trochę formatowanie niektórych komórek, np. żeby wyciągał tylko datę bez czasu, bo to niepotrzebne oraz wyświetlanie kwot wraz z jednostką "zł".

    I teraz zaczęła się ponownie przygoda pod tytułem na tych samych plikach pracowały 3 osoby, więc masz tu juniorze i ucz się mergowania kodu i rozwiązywania konfliktów. Tym razem poszło mi już raczej lepiej niż ostatnio, a poprawki robiłem bezpośrednio w PHPStormie, w którym i tak muszę to opanować lepiej, a już local history się przydawało. Złożyłem więc całość do kupy u siebie i zacząłem testować. Wszystko wreszcie działało, więc nie musiałem głośno przeklinać i pisać żalów do PM-a, że dostaję zjeb... kod, a jako junior męczę się z tym podwójnie, bo zawsze myślę, że to ja coś zepsułem i tracę czas na szukanie błędów gdzie ich nie ma. Na koniec przypomniałem sobie jeszcze, że kolega z front-endu zgłaszał jakiś błąd w filtrach. Sprawdziłem i działały jak trzeba poza jednym przypadkiem. Wpisanie daty typu "2005-00-00" olewało taką granicę w filtrach, ale nie doszedłem czemu się tak dzieje, chociaż trochę poczytałem. Nie chciało mi się też już mocno zagłebiać pod koniec dnia, a PM powiedział, żebym na razie olał i poszedł do domu. Wystawiłem więc merge requesta i architekt miał wyjątkowo czas, bo zabrał się za niego szybko na prośbę PM-a, także jeszcze mnie do siebie zawołał i omawialiśmy mój kod. Dowiedziałem się, że używanie empty() to zło, bo powoduje mindfucki, ale nie pamiętał czemu. Ja się broniłem, że czytałem na php.net, że to fajne, bo ma w sobie dwa testy. Może kiedyś się dowiem, co z tą funkcją jest nie tak.


2 komentarze:

  1. Hejka ten empty moze dlatego? http://www.texelate.co.uk/blog/post/101-how-to-test-for-empty-strings-in-php/

    Fajny blog ;)

    OdpowiedzUsuń
    Odpowiedzi
    1. Hej Marcin! Dzięki za komentarz. To rzeczywiście wygląda sensownie i chyba zapomnę o empty() i wrócę do standardowego isset() i dodatkowych warunków.
      Znalazłem jeszcze coś takiego, drugi wynik w Google po zapytaniu o "php isset":
      http://phpedia.pl/wiki/Jaka_jest_r%C3%B3%C5%BCnica_w_zastosowaniu_isset()_i_!empty()_%3F

      Usuń