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
l0ud
post
Post #2





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:
  1. <?php
  2. error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_STRICT);
  3. ?>

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
  1. <?php
  2. error_reporting(E_ALL | E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_STRICT);
  3. ?>



No i coś się zmieniło - mam błąd (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat
Can't use method return value in write context


Teraz tylko pozostaje zrozumieć, dlaczego on występuje...

Ok, wyjaśnione (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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
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 - 19:05