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

Читайте также:  Java with maven что

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

Есть ли в 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 сразу знает, когда что-то является переменной, а не функцией или ключевым словом, без необходимости объявления.

Читайте также:  Работа с tensorflow python

На самом деле, код 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 .

Источник

Можно ли в 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 сразу знает, когда что-то является переменной, а не функцией или ключевым словом, без необходимости объявления.

Читайте также:  Perl and python code

Фактически, код javascript также работает без объявлений, но здесь они по-прежнему рекомендуются в большинстве случаев.

Если вы хотите объявить переменную и установить для нее значение null в PHP просто используйте:

В PHP нет явного оператора для инициализации переменных, как в Javascript var . Переменные PHP инициализируются при первом назначении. Хорошо это или плохо — это выбор дизайна. Чтобы создать переменную, вам всегда нужно что-то ей присвоить. Поскольку переменная должна иметь какое-то значение, а значение PHP «ничего» равно null , вы хотите:

(Существуют альтернативные способы создания переменных, например ссылки, например: parse_str($foo, $bar); var_dump($bar); , но оставим это в стороне.)

В var оператор существует в Javascript для определения области действия; Javascript имеет вложенные области видимости и требует явной инициализации для определения области видимости переменной. Область видимости в 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 .

Источник

Оцените статью