Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Nieoczekiwane działanie isset() i empty()
l0ud
post
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ę:
  1. <?php
  2. public function postVar($name) {
  3. if (isset($this->postArray[$name])) return $this->postArray[$name];
  4. else return null;
  5. }
  6. ?>


I teraz chcę sprawdzić, czy zwracana wartość nie jest pusta:

  1. <?php
  2. if (empty($router->postVar('submit'))) {
  3. echo 'pusta';
  4. }
  5. else {
  6. echo 'jest';
  7. }
  8. ?>


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:
  1. <?php
  2. $submit = $router->postVar('submit');
  3.  
  4. if (empty($submit)) {
  5. echo 'pusta';
  6. }
  7. else {
  8. echo 'jest';
  9. }
  10. ?>

Nie mam pojęcia dlaczego tak się dzieje, dla mnie to trochę nielogiczne jest. (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) 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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cbagov
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 15.10.2025 - 01:41