Можно ли в 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)

Другие вопросы по тегам