empty
Проверяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или её значение равно false . empty() не генерирует предупреждение, если переменная не существует.
Список параметров
Если переменная не существует, предупреждение не генерируется. Это значит, что empty() фактически является точным эквивалентом конструкции !isset($var) || $var == false
Возвращаемые значения
Возвращает true , если параметр var не существует, если значение равно нулю, либо не задано, смотрите Преобразование в булев тип. В противном случае возвращает false .
Примеры
Пример #1 Простое сравнение empty() и isset() .
// Принимает значение true, потому что $var пусто
if (empty( $var )) echo ‘$var или 0, или пусто, или вообще не определена’ ;
>
// Принимает значение true, потому что $var определена
if (isset( $var )) echo ‘$var определена, даже если она пустая’ ;
>
?>
Пример #2 empty() и строковые индексы
$expected_array_got_string = ‘somestring’ ;
var_dump (empty( $expected_array_got_string [ ‘some_key’ ]));
var_dump (empty( $expected_array_got_string [ 0 ]));
var_dump (empty( $expected_array_got_string [ ‘0’ ]));
var_dump (empty( $expected_array_got_string [ 0.5 ]));
var_dump (empty( $expected_array_got_string [ ‘0.5’ ]));
var_dump (empty( $expected_array_got_string [ ‘0 Mostel’ ]));
?>?php
Результат выполнения данного примера:
bool(true) bool(false) bool(false) bool(false) bool(true) bool(true)
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций или именованных аргументов.
Замечание:
При использовании функции empty() на недоступных (необъявленных) свойствах объекта будет вызван встроенный метод объекта __isset(), если он определён.
Смотрите также
- isset() — Определяет, была ли установлена переменная значением, отличным от null
- __isset()
- unset() — Удаляет переменную
- array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
- count() — Подсчитывает количество элементов массива или Countable объекте
- strlen() — Возвращает длину строки
- Таблица сравнения типов
User Contributed Notes 36 notes
$testCase = array(
1 => » ,
2 => «» ,
3 => null ,
4 => array(),
5 => FALSE ,
6 => NULL ,
7 => ‘0’ ,
8 => 0 ,
foreach ( $testCase as $k => $v ) if (empty( $v )) echo »
$k => $v is empty» ;
>
>
/**
Output
1=> is empty
2=> is empty
3=> is empty
4=>Array is empty
5=> is empty
6=> is empty
7=>0 is empty
8=>0 is empty
**/
?>
Please note that results of empty() when called on non-existing / non-public variables of a class are a bit confusing if using magic method __get (as previously mentioned by nahpeps at gmx dot de). Consider this example:
class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
>
$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;
var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // true, .. say what?
$tmp = $registry -> notEmpty ;
var_dump (empty( $tmp )); // false as expected
?>
The result for empty($registry->notEmpty) is a bit unexpeced as the value is obviously set and non-empty. This is due to the fact that the empty() function uses __isset() magic functin in these cases. Although it’s noted in the documentation above, I think it’s worth mentioning in more detail as the behaviour is not straightforward. In order to achieve desired (expexted?) results, you need to add __isset() magic function to your class:
class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
public function __isset ( $key )
if (isset( $this -> _items [ $key ])) return ( false === empty( $this -> _items [ $key ]));
> else return null ;
>
>
>
$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;
var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // false, finally!
?>
It actually seems that empty() is returning negation of the __isset() magic function result, hence the negation of the empty() result in the __isset() function above.
Php создать пустую переменную
The null type is PHP’s unit type, i.e. it has only one value: null .
Undefined, and unset() variables will resolve to the value null .
Syntax
There is only one value of type null , and that is the case-insensitive constant null .
Casting to null
This feature has been DEPRECATED as of PHP 7.2.0, and REMOVED as of PHP 8.0.0. Relying on this feature is highly discouraged.
Casting a variable to null using (unset) $var will not remove the variable or unset its value. It will only return a null value.
See Also
User Contributed Notes 6 notes
Note: empty array is converted to null by non-strict equal ‘==’ comparison. Use is_null() or ‘===’ if there is possible of getting empty array.
NULL is supposed to indicate the absence of a value, rather than being thought of as a value itself. It’s the empty slot, it’s the missing information, it’s the unanswered question. It’s not a jumped-up zero or empty set.
This is why a variable containing a NULL is considered to be unset: it doesn’t have a value. Setting a variable to NULL is telling it to forget its value without providing a replacement value to remember instead. The variable remains so that you can give it a proper value to remember later; this is especially important when the variable is an array element or object property.
It’s a bit of semantic awkwardness to speak of a «null value», but if a variable can exist without having a value, the language and implementation have to have something to represent that situation. Because someone will ask. If only to see if the slot has been filled.
I would like to add for clarification that:
—$x;
// $x is still NULL.
// Decrementing NULL, using Decrement Operator, gives NULL.
$x-=1;
// $x is now int(-1).
// This actually decrements value by 1.
On the other hand, Incrementation works simply as expected.
Hope this helps 🙂
Note: Non Strict Comparison ‘==’ returns bool(true) for
Use Strict Comparison Instead
Можно ли объявить пустую переменную в PHP?
Есть ли в PHP какой-либо явный способ объявить переменную без присвоения какого-либо значения? Аналогично Java или Javascript? Что-то вроде этого.
Я предполагаю, что значение по умолчанию для этой переменной будет NULL . Если это невозможно, есть ли логическое объяснение, почему это не было реализовано в PHP?
Есть много статей с таблицами, изображающими логические результаты isset , empty и т. Д. И есть также пример значения var $var; (a variable declared, but without a value) , но имеет ли смысл перечислять его?
+------------------------------------------------------+--------------+-------------+---------------+ | Value of variable ($var) | isset($var) | empty($var) | is_null($var) | +------------------------------------------------------+--------------+-------------+---------------+ | NULL | bool(false) | bool(true) | bool(true) | | var $var; (a variable declared, but without a value) | bool(false) | bool(true) | bool(true) | +------------------------------------------------------+--------------+-------------+---------------+
3 ответа
Нет var ключевого слова, которое работает так же, как в javascript. Из w3schools:
Примечание. В отличие от других языков программирования, в PHP нет команды для объявления переменной. Он создается в тот момент, когда вы впервые присваиваете ему значение.
Если это невозможно, есть ли логическое объяснение, почему это не было реализовано в PHP?
Одним логическим объяснением может быть то, что в PHP все переменные начинаются с символа $ . Поэтому PHP сразу знает, когда что-то является переменной, а не функцией или ключевым словом, без необходимости объявления.
На самом деле, код javascript также работает без объявлений, но здесь они по-прежнему рекомендуются в большинстве случаев.
Если вы хотите объявить переменную и установить ее значение в null в PHP, просто используйте:
В контексте класса вы можете сделать это без явного null :
Как простая переменная, вы не можете. Используйте $variable = null (или вообще не пишите). Поскольку все ненастроенные переменные по умолчанию равны нулю:
$var1 = null; var_dump(isset($var1), empty($var1), is_null($var1)); // bool(false), bool(true), bool(true) var_dump(isset($var2), empty($var2), is_null($var2)); // Notice: Undefined variable: var2 - From `is_null` // bool(false), bool(true), bool(true)
В PHP нет явного оператора для инициализации переменных, как в Javascript var . Переменные PHP инициализируются при первом назначении. Это выбор дизайна, к лучшему или к худшему. Чтобы создать переменную, вам всегда нужно что-то присвоить ей. Поскольку переменная должна иметь какое-то значение, а значение PHP для «ничего» равно null , вам нужно:
(Существуют альтернативные способы создания переменных, например ссылки, например: parse_str($foo, $bar); var_dump($bar); , но давайте оставим это в стороне.)
Оператор var существует в Javascript для определения области видимости; Javascript имеет вложенные области видимости и нуждается в явной инициализации, чтобы определить область действия переменной. Scoping в PHP работает по-другому и не имеет такой двусмысленности, поэтому такое отдельное утверждение не является необходимым. Первоначально PHP также очень любил неявные глобальные переменные (задним числом это ужасная идея), что в некоторой степени противоречит идее явных операторов инициализации.
var $var; (объявленная переменная, но без значения)
Это неполная / неправильная кавычка, она должна быть «объявленной переменной, но без значения в классе « , поскольку это единственное место, где ключевое слово var может быть использован.
Например, Python также использует инициализацию по присваиванию, и также имеют вложенную область видимости. Для решения этой проблемы используется другой подход:
foo = 42 def bar(): foo = 69 def baz(): nonlocal foo foo = 2
Правило в Python состоит в том, что переменная является локальной для функции, если какое-либо присваивание выполняется переменной внутри функции. Таким образом, foo = 69 создает новую локальную переменную внутри bar здесь. Чтобы разрешить присваивание переменной из унаследованной области, ключевое слово nonlocal или global должно использоваться для явного обозначения этой переменной как унаследованной. foo = 2 здесь переназначается foo = 69 , но не переназначается foo = 42 .