Можно ли в PHP объявить пустую переменную?
Есть ли в PHP какой-либо явный способ объявить переменную без присвоения какого-либо значения? Аналогично Java или Javascript? Что-то вроде этого.
var $variable;
Я предполагаю, что значение по умолчанию для этой переменной будет 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) |
+------------------------------------------------------+--------------+-------------+---------------+
https://www.virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php
3 ответа
Здесь нет var
ключевое слово, которое работает так же, как в javascript. Из w3schools:
Примечание. В отличие от других языков программирования, в PHP нет команды для объявления переменной. Он создается в тот момент, когда вы впервые присваиваете ему значение.
Ваш другой вопрос:
Если это невозможно, есть ли какое-нибудь логическое объяснение, почему это не было реализовано в PHP?
Логическим объяснением может быть то, что в PHP все переменные начинаются с $
символ. Таким образом, PHP сразу знает, когда что-то является переменной, а не функцией или ключевым словом, без необходимости объявления.
Фактически, код javascript также работает без объявлений, но здесь они по-прежнему рекомендуются в большинстве случаев.
Если вы хотите объявить переменную и установить для нее значение null
в PHP просто используйте:
$myVar = null;
В PHP нет явного оператора для инициализации переменных, как в Javascript var
. Переменные PHP инициализируются при первом назначении. Хорошо это или плохо - это выбор дизайна. Чтобы создать переменную, вам всегда нужно что-то ей присвоить. Поскольку переменная должна иметь какое-то значение, а значение PHP "ничего" равноnull
, вы хотите:
$variable = 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
.
В контексте класса вы можете сделать это без явного null
:
class BarClass {
private FooClass $foo;
Как простая переменная, вы не можете. Использовать$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)