Объединение isset и is_null завершается неудачно при проверке неопределенного свойства объекта - PullRequest
0 голосов
/ 15 апреля 2011

Я пытаюсь объединить isset и is_null в одну функцию для простоты использования

Мой подход:

class sys {

  public static function is_null(&$variable) {

    // if it's not set
    if (!isset($variable)) {
      return true;
    }

    // if array
    if (is_array($variable)) {
      return (boolean) (count($variable) < 1);
    }

    // if string
    return (boolean) (strlen($variable) < 1);
  }

}

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

ErrorException [Уведомление]: косвенное изменение перегруженного свойства xxx не имеет никакого эффекта.

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Для простоты использования? Эквивалент return !isset($var) || empty($var);. это так сложно?

При создании подобной функции вам необходимо понять, что isset() - это , а не функция. Это языковая конструкция. Таким образом, вы не можете передать переменную в функцию, а затем вызвать isset для этой переменной (ну, по крайней мере, без генерации уведомления).

Во-вторых, нет необходимости приводить к логическому значению: return (boolean) (strlen($variable) < 1);. Это точно так же, как return strlen($variable) < 1;.

В-третьих, нет смысла count() или использовать strlen(), поскольку именно для этого empty() был разработан для проверки.

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

В целом, я бы предложил , а не , сделав такого рода "вспомогательную" функцию. Просто используйте !isset($var) || empty($var), если хотите проверить, пусто ли оно. Это более ясно, имеет больше смысловой смысл и, честно говоря, не дублирует усилия. И если вас не волнует уведомление, вы можете просто заменить весь вызов на if (empty($variable)) ...

Но если вы используете эту функцию, я бы предложил изменить имя. Он вернет true, даже если переменная не null, поэтому вызов функции is_null ошибочен. Возможно, is_empty будет лучше ...

0 голосов
/ 15 апреля 2011

просто используйте empty()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...