isset() или!пустые() функции для всех переменных в ваших представлениях?


Привет, я использую CakePHP, и мне интересно, ребята, вы ставите isset() или !пустой() вокруг всех ваших переменных в представлениях? Или я должен зависеть от проверки данных? Каким было бы предлагаемое решение?

Author: baker, 2009-12-21

6 answers

Я думаю, вы должны знать различия между isset и empty и использовать тот, который удовлетворяет вашим потребностям.

empty вернет FALSE, если переменная имеет непустое и ненулевое значение.

Следующие значения считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 в виде строки)
  • NULL
  • FALSE
  • array() (пустой массив)
  • var $var; (объявленная переменная, но без значения в классе)

С другой стороны, isset вернет FALSE, если переменная не существует или была снята с unset(), или переменная была установлена в NULL.

 14
Author: CMS, 2009-12-21 04:03:38

Это довольно широкий вопрос. Это зависит от того, можете ли вы ожидать, что переменная всегда будет присутствовать, или могут быть разумные случаи, когда ее нет. Если, согласно структуре вашей программы, определенная переменная всегда должна присутствовать в этой точке программы, вы не должны проверять ее существование. Таким образом, вы получите хорошее предупреждение, когда что-то пойдет не так, и вы поймете, что что-то пошло не так. Если, ОТО, вы ожидаете, что переменная иногда будет отсутствовать, вам нужно проверить наличие этот случай, чтобы изящно уловить ошибку, которая в противном случае привела бы к этому.

Кроме того, выбор между isset и !empty зависит от того, имеете ли вы в виду "установлено, а не null" или "установлено и содержит что-то, что не учитывается false". Это небольшое, но иногда важное различие.

 4
Author: deceze, 2009-12-21 03:58:28

Чтобы ответить на вопрос, нет.

  1. Если значение не может быть нулевым в модели, то я этого не делаю.
  2. Если это для ошибок и пустых наборов, то лучше перенаправить на добавление страниц и 404 не найдется.
  3. Когда я использую его в представлении, оно обычно находится на высоком уровне, так что мне не приходится писать слишком часто.
  4. 3 это часто предполагает тщательный дизайн вашей модели. ПОЭТОМУ использование Isset и !empty - это оправдание для того, чтобы не работать с этими моделями.

  5. Предметы которые являются необязательными, по-видимому, часто также находятся в отношениях от одного до многих, поскольку эти циклы foreach более эффективны, чем проверка каждого значения.
 1
Author: stevenf, 2009-12-21 21:53:29

Лично я использую isset по привычке, отрицание - это не то, что я часто использую.

 1
Author: Anthony Forloney, 2012-07-17 04:05:57

Когда речь идет о выборе между тем или иным

Когда он не установлен, он пуст когда он не пуст, он устанавливается

Но когда он установлен, он может быть пустым... ан может и не..........

Так вот в чем разница

 0
Author: Robust Solution, 2009-12-24 00:18:38

Когда вы делаете что-то вроде $this->set(compact('posts', 'tags', 'categories')); с контроллера, в представление отправляются только переменные, которые не являются null. Поэтому, если вы ранее выполнили $categories = $this->Categories->find('all', ...); и он не вернул результатов, то $categories не будет существовать в вашем представлении. Поэтому, чтобы ответить на ваш вопрос, с точки зрения, я просто делаю:

<?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; ?>

Пустые значения также не приравниваются к истине, поэтому вы можете делать такие вещи, как:

<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>

Короче говоря, я использую isset() только для того, чтобы избежать ошибок, связанных с тем, что переменные не заданы.

Я редко использую empty() и я прекрасно обходился без этого и на других языках программирования.

 0
Author: deizel, 2009-12-24 11:51:36