![]() |
[ciekawostka] "poprawny kod" w Yii - Wersja do druku +- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl) +-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www) +--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych) +--- Wątek: [ciekawostka] "poprawny kod" w Yii (/thread-ciekawostka-poprawny-kod-w-yii) |
[ciekawostka] "poprawny kod" w Yii - R_Rafalsky - 21-03-2012 Miałem ostatnio spory problem z jednym zadaniem. Mianowicie w projekcie na localhoście z dnia na dzień pojawił się problem, który nie istniał w sieci. Pewnego dnia wywaliło mi w jednej linijce błąd " Trying to get property of non-object". Problem znany przyczyna znajoma. Zdziwiło mnie, że w sieci problem nie istnieje. Strona śmiga aż miło. Ściągnąłem wersję z sieci i nadal localhost udaje, że nie widzi obiektu. Wszelkie var_dumpy podawały poprawne wyniki, a nadal problem występował. Usunąłem lokalnie cały folder protected i ściągnąłem wersję z sieci. Nic nie dało. W sieci działa u mnie ni. W końcu postanowiłem pobawić się w kodzie i coś takiego mi zadziałało: Kod PHP: <?php Czy ktoś jest mi w stanie odpowiedzieć na pytanie: Dlaczego to działa? Problem leży w 5 linijcie. Dlaczego dla if $user1 jest tablicą by dalej był normalnie widoczny jako obiekt? Błąd odwołania do nie-obiektu wyskakiwał gdy warunek if miał taki zapis: Kod PHP: if($user1->avatar): RE: [ciekawostka] "poprawny kod" w Yii - Pedro84 - 21-03-2012 Zrób na początek jedną rzecz: Kod: var_dump($row['follower_ID']); RE: [ciekawostka] "poprawny kod" w Yii - R_Rafalsky - 21-03-2012 Kod PHP: string(x) "NazwaUsera" powtórzone n razy dla wszystkich wyników foreach. Czyli prawidłowo RE: [ciekawostka] "poprawny kod" w Yii - Pedro84 - 21-03-2012 Pytanie za 100 punktów: jaką wersję PHP masz na serwerze produkcyjnym, a jaką na dev? RE: [ciekawostka] "poprawny kod" w Yii - R_Rafalsky - 21-03-2012 wersja nie ma tu nic do rzeczy, gdyż na produkcyjnym stronę robiłem od zera, wrzuciłem na serwer i zacząłem robić poprawki. W tym czasie nigdzie konfiguracji nie ruszałem ![]() Ale jak chcesz wiedzieć: Localhost 5.3.5 Hosting: 5.2.17 RE: [ciekawostka] "poprawny kod" w Yii - Pedro84 - 21-03-2012 Hm... wiesz w sumie to mogło być to, że tablica $obserwuje była pusta. findAll() w przypadku braku wyników zwraca pustą tablicę: dlatego nie krzyczało przy pętli, ale w momencie odwołania do obiektu już tak. Idź w tym kierunku. RE: [ciekawostka] "poprawny kod" w Yii - R_Rafalsky - 21-03-2012 Obserwuje nie jest puste gdyż ten kod wywala mi trzy osoby dla przykładowego usera. Więc się zgadza. Wyniki z bazy na pewno dobre gdyż obie wersje z tej samej bazy korzystają. Z powodu braku pomysłów nawet assets usuwałem, co wiem, że było głupotą. Ale co poradzić. Gdzieś jest problem ![]() Dla mnie dziwne jest to, że jedna zmienna w jednym miejscu traktowana jest jako tablica w innym jako obiekt bez żadnej manipulacji ją. RE: [ciekawostka] "poprawny kod" w Yii - Pedro84 - 21-03-2012 A ja bym jednak poszedł tą drogą. Dlaczego? Bo wystarczy, że na hostingu produkcyjnym masz wyłączone wyświetlanie warningów (Undefinex index), a na localu nie. Błąd "Trying to get property of non-object" wówczas Ci się wyświetli. Z drugiej strony, coś musi być nie tak, no nie ma możliwości, żeby traktowało tę samą zmienną jako tablicę, a na innym serwerze jako obiekt (tym bardziej, że findAll() zwraca tablicę obiektów albo pustą tablicę). Może to jakiś błąd Yii i określonej wersji PHP? Trudno mi powiedzieć, nie spotkałem się z tym. Aczkolwiek jestem cholernie ciekaw co to może być. Może podeślij jakiś większy fragment kodu (taki, żeby coś szło odpalić), spróbowałbym zobaczyć na swoich serwerach jak to wygląda na różnych wersjach. RE: [ciekawostka] "poprawny kod" w Yii - R_Rafalsky - 21-03-2012 To nawet nie jest tak. W jednej linijce traktuje jako tablicę, linijka niżej jest już obiekt. Jutro akurat mam wyjazd ale jak tylko będę mógł to się odezwę. |