Php создать пустую переменную

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’ ]));
?>

Результат выполнения данного примера:

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 .

Источник

Читайте также:  Вывести все поля объекта python
Оцените статью