3 回答

TA貢獻1773條經驗 獲得超3個贊
PHP 沒有像 Javascript 的var. PHP 變量在首次分配時被初始化。這是一種設計選擇,無論好壞。要創建一個變量,你總是必須給它賦值。由于變量必須有一些值,而 PHP 的“無”值是null,因此您需要:
$variable = null;
(存在創建變量的替代方法,例如引用,例如:parse_str($foo, $bar); var_dump($bar);,但讓我們把它放在一邊。)
該var語句存在于 Javascript 中以確定作用域;Javascript 具有嵌套作用域,需要顯式初始化以確定變量的作用域。PHP 中的作用域以不同的方式工作并且沒有歧義,因此不需要這樣一個單獨的語句。最初 PHP 也非常喜歡隱式全局變量(事后看來這是一個糟糕的想法),這與首先顯式初始化語句的想法有點沖突。
var $var;(聲明的變量,但沒有值)
這是一個不完整/不正確的引用,它應該是"a variable declared but without a value in a class ",因為這是唯一var可以使用關鍵字的地方。
例如,Python 也使用賦值初始化,也有嵌套作用域。它使用不同的方法來解決這個問題:
foo = 42
def bar():
foo = 69
def baz():
nonlocal foo
foo = 2
Python 中的規則是,如果對函數內部的變量進行了任何賦值,則該變量是函數的局部變量。所以foo = 69在這里創建了一個新的局部變量bar。要允許從繼承范圍對變量進行賦值,必須使用nonlocalor關鍵字顯式表示該變量是繼承的。這里重新分配,但都不重新分配。globalfoo = 2foo = 69foo = 42

TA貢獻1839條經驗 獲得超15個贊
沒有var
關鍵字的工作方式與 javascript 中的相同。
注意:與其他編程語言不同,PHP 沒有用于聲明變量的命令。它是在您第一次為其賦值時創建的。
你的另一個問題:
如果不可能,是否有任何合乎邏輯的解釋為什么它沒有在 PHP 中實現?
一種合乎邏輯的解釋是,在 PHP 中,所有變量都以$
符號開頭。因此 PHP 無需聲明即可立即知道什么時候是變量而不是函數或關鍵字。
事實上,javascript 代碼也可以不使用聲明,但在這里,大多數情況下仍然推薦使用它們。
如果要null
在 PHP 中聲明一個變量并將其值設置為,只需使用:
$myVar?=?null;

TA貢獻1757條經驗 獲得超8個贊
您可以在不顯式的情況下進行null:
class BarClass {
? ? private FooClass $foo;
作為簡單變量,你不能。使用$variable = null(或根本不寫)。由于默認情況下所有未設置的變量均為 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)
- 3 回答
- 0 關注
- 241 瀏覽
添加回答
舉報