[PHP] Nieoczekiwane działanie isset() i empty() |
[PHP] Nieoczekiwane działanie isset() i empty() |
30.04.2008, 15:16:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Witam, napotkałem na pewien problem. Mam utworzony obiekt 'router' który ma za zadanie zwracać odpowiednie zmienne. Deklaruję taką metodę:
I teraz chcę sprawdzić, czy zwracana wartość nie jest pusta:
Powyższy kod nie wygeneruje żadnego błędu, ale spowoduje wyświetlenie się pustej strony. Będzie ona pusta nawet wtedy, gdy przed całym warunkiem dodam jakieś echo. Poniższy kod działa:
Nie mam pojęcia dlaczego tak się dzieje, dla mnie to trochę nielogiczne jest. Pewnie po prostu czegoś nie rozumiem, ale nie mogę samodzielnie tego uzasadnić... Dodaję log do wincachegrind, jeżeli pomoże on w rozwiązaniu problemu: http://www.sendspace.pl/file/LGfYFlka/ Proszę o pomoc i pozdrawiam Ten post edytował l0ud 30.04.2008, 15:28:22 -------------------- XMPP: l0ud@chrome.pl
|
|
|
30.04.2008, 15:24:10
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 2 712 Pomógł: 23 Dołączył: 27.10.2003 Skąd: z kontowni Ostrzeżenie: (0%) |
A sprawdzałeś w error_logu? Może problem jest jakiś trywialny.
-------------------- "Coś się kończy, coś się zaczyna." Andrzej Sapkowski
|
|
|
30.04.2008, 15:31:54
Post
#3
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) |
sprawdz czy isset($this->postArray[$name]))
czyli odpowiednia wlasciwosc obiektu nie jest wczesniej zainicjowana/stworzona mimo, ze pusta wtedy isset nie daje null tylko return a empty widzi, ze empty i daje "pusta" WersjaOpisPHP 5As of PHP 5, objects with no properties are no longer considered empty. PHP 4As of PHP 4, The string value "0" is considered empty. prawdopodobnie tu sęk |
|
|
30.04.2008, 15:49:41
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
kszychu, wszystkie błędy powinny być wyświetlane. Na samym początku całości jest:
I dotychczas to działało. Jeżeli dostawię gdzieś jakąś literkę to wyskakuje parse error, więc wszystko ok... cbagov, problem w tym, że warunek z empty zupełnie nic nie zwraca. Po prostu kod przerywa się nie dając żadnego wyniku. [edit] Przyjrzałem się jednak temu error_reporting. Teraz wygląda tak
No i coś się zmieniło - mam błąd Cytat Can't use method return value in write context Teraz tylko pozostaje zrozumieć, dlaczego on występuje... Ok, wyjaśnione Cytat Note: empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).
Ten post edytował l0ud 30.04.2008, 15:44:23 -------------------- XMPP: l0ud@chrome.pl
|
|
|
30.04.2008, 15:49:43
Post
#5
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) |
z tego co wiem to empty nie mozna uzywac przy sprawdzaniu return z funkcji
"<H3 class=title>Notatki</H3> Informacja: Ponieważ jest to element składni języka a nie funkcja" |
|
|
30.04.2008, 15:56:37
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Dokładnie, problem rozwiązany
Ostatecznie zrobiłem na ten sposób:
-------------------- XMPP: l0ud@chrome.pl
|
|
|
30.04.2008, 15:58:52
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) |
Ja polece zrobienie
$router->postIsset('submit');
Wygodnie się wtedy pisze Ten post edytował bim2 30.04.2008, 15:59:07 -------------------- |
|
|
30.04.2008, 15:59:46
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) |
W manualu jest wszystko ładnie opisane: empty" title="Zobacz w manualu PHP" target="_manual
(sekcja: Parameters) -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
30.04.2008, 16:23:22
Post
#9
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) |
@bim2 Obawiam sie, ze tak 'sprawdzalbys' stan slowa ['submit']
a l0ud trzyma wartosci w tablicy [quote name='bim2' date='30.04.2008, 16:58:52 ' post='466812'] Ja polece zrobienie $router->postIsset('submit'); function postIsset($sName) {return isset($sName);} Ten post edytował cbagov 30.04.2008, 16:29:45 |
|
|
30.04.2008, 18:18:13
Post
#10
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
Ja polece zrobienie $router->postIsset('submit');
Wygodnie się wtedy pisze To jest masło maślane. Co innego empty() którego parametr musi być zmienną. (chyba że źle pamiętam, bo teraz nie sprawdzę) Do tego jednak lepiej spr. jak napisał l0ud, czyli porównanie wartości zwróconej. Bo w odróżnieniu od zmiennej, ma ona konkretną wartość. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.05.2024 - 23:56 |