2009-12-21 13 views

Odpowiedz

14

Myślę, że powinieneś znać różnice między isset i empty i korzystać z tego, który spełnia Twoje potrzeby.

empty powróci FALSE czy zmienna posiada niepusty i niezerową wartość.

następujące wartości uznaje się za pusty:

  • "" (ciąg pusty)
  • 0 (0 liczbą całkowitą)
  • "0" (0 w ciągu)
  • NULL
  • FALSE
  • array() (pusta tablica)
  • var $var; (zmienna zadeklarowana, ale bez wartości w klasie)

Z drugiej strony isset powróci FALSE jeśli zmienna nie istnieje lub został wyłączony z unset() lub zmienna została ustawiona na NULL.

1

Osobiście używam z przyzwyczajenia isset, zanegowanie nie jest czymś, z czego często korzystam.

4

To dość szerokie pytanie. Zależy to od tego, czy można się spodziewać, że zmienna będzie zawsze obecna, czy też mogą istnieć przypadki, w których nie jest. Jeśli, zgodnie z twoją strukturą programu, pewna zmienna powinna być zawsze obecna w tym momencie programu, nie powinieneś sprawdzać jej istnienia. W ten sposób otrzymasz dobre ostrzeżenie, gdy coś zaskoczy i wiesz, że coś poszło nie tak. Jeśli, OTOH, oczekujesz, że zmienna jest czasami nieobecna, musisz sprawdzić w tym przypadku, by z wdziękiem złapać błąd, który w przeciwnym razie by powstał.

Ponadto wybór pomiędzy isset i !empty zależy od tego, czy masz na myśli „jest ustawiony i nie null” lub „jest ustawiony i zawiera coś, co nie jest uważane false”. To mała, ale czasami ważna różnica.

+0

Całkowicie się z Tobą zgadzam z błędem przy złapaniu – ariefbayu

1

Aby odpowiedzieć na pytanie, nie.

  1. Jeśli wartość nie może być pusta w modelu, to nie.
  2. Jeśli chodzi o błędy i puste miejsca, to lepiej przekierować, aby dodać strony, a 404 nie znajdzie.
  3. Kiedy używam go w widoku, zwykle jest na wysokim poziomie, więc nie muszę pisać zbyt często.
  4. 3 obejmuje często wymaga starannego zaprojektowania modelu. W związku z tym używanie Isset i! Empty jest o wymówką, aby nie pracować na tych modelach.

  5. Przedmioty, które są opcjonalne, zdają się często występować w relacjach jeden do wielu, ponieważ pętle foreach są bardziej skuteczne niż sprawdzanie każdej wartości.
0

gdy jest to wybór między to czy tamto

gdy nie jest jest ustawiona, to jest pusta < => gdy nie jest pusta, jest ona ustawiona

ale kiedy go jest ustawiony, to może być pusty ... An nie może ..........

więc jest to differnece

0

Kiedy robisz coś podobnego $this->set(compact('posts', 'tags', 'categories')); ze sterownika, tylko zmienne, które nie są null, są wysyłane do widoku. Więc jeśli wcześniej zrobiłeś $categories = $this->Categories->find('all', ...); i nie zwrócił żadnych wyników, to $categories nie będzie istnieć w twoim widoku. Tak, aby odpowiedzieć na pytanie, w widoku, po prostu zrobić:

<?php if (isset($categories)): ?> 
    <ul> 
     <?php foreach ($categories as $category): ?> 
      <li>{output category information here}</li> 
     <?php endforeach; ?> 
    </ul> 
<?php else: ?> 
    <p>No categories</p> 
<?php endif; ?> 

Puste wartości również nie jest równoznaczny z prawdą, więc można robić takie rzeczy jak:

<dl> 
    <dt>Title</dt> 
    <dd><?php echo $category['Category']['title']; ?></dd> 
    <dt>Description</dt> 
    <dd> 
     <?php if ($category['Category']['description']): ?> 
      <?php echo $category['Category']['description']; ?> 
     <?php else; ?> 
      None 
     <?php endif; ?> 
    </dd> 
</dl> 

W skrócie I tylko wykorzystać isset(), aby uniknąć błędów dotyczących ustawiania zmiennych.

Ja rzadko używam empty() i udało mi się bez problemu w innych językach programowania.

Powiązane problemy