Функции isset () или! empty () для всех переменных в ваших представлениях? - PullRequest
5 голосов
/ 21 декабря 2009

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

Ответы [ 6 ]

14 голосов
/ 21 декабря 2009

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

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

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

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

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

4 голосов
/ 21 декабря 2009

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

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

1 голос
/ 22 декабря 2009

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

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

  5. Необязательные элементы, по-видимому, часто также находятся в отношениях один ко многим, поскольку эти циклы foreach более эффективны, чем проверка каждого значения.
1 голос
/ 21 декабря 2009

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

0 голосов
/ 24 декабря 2009

Когда вы делаете что-то вроде $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 голосов
/ 24 декабря 2009

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

когда он не установлен, он пуст <=> когда он не пустой, он установлен

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

так что это различие

...