设置 $var 是啥意思?
Posted
技术标签:
【中文标题】设置 $var 是啥意思?【英文标题】:What does it mean that $var is set?设置 $var 是什么意思? 【发布时间】:2018-11-24 17:06:42 【问题描述】:设置或未设置 $var 是什么意思(在 php 中或编程中)?
我在这里找到了http://www.php.net/manual/en/types.comparisons.php 一些比较表,但有时它让我感到困惑。
这是否意味着变量在声明时已设置,在未声明或已声明但未赋值时已赋值或未设置?
【问题讨论】:
PHP 没有声明变量。 @thatguy 当然,再看看我的评论。我提到了它什么时候会是真的,而不是假的。 @thatguy 此时它将有一个隐含的NULL
值,这仍然使他的陈述为真。
@thatguy 如果您尝试使用尚未定义的变量,它将具有NULL
的值并发出通知错误。此外,Undefined
是 javascript 的东西,而不是 php 在技术上。 php 中确实没有Undefined
状态。它要么没有用隐含的NULL
值定义(如果在定义之前使用它,请注意错误)或用某个值定义(可能包括NULL
,即使isset
为此返回false)。
@thatguy 是的,从技术上讲,“未定义”确实存在,因为该变量尚未定义,但“未定义”实际上并不是 php 中的真实类型,就像它在 JavaScript 中一样(我假设您指的是特定类型,如果不是,则忽略 JS 部分)。这只是意味着该变量尚未声明或在某些时候未设置。以下是 null 和 undefined 之间的区别:3v4l.org/Nmk0t
【参考方案1】:
isset()
是 PHP 中的一个函数,如果变量(在本例中为 $var)被赋值,则返回 true。如果变量已经创建但没有赋值,值为 null 或 undefined,它将返回 false。基本上,isset($var)
说这个变量是否可以安全使用。
更新
为了解释NULL
值和undefined
之间的区别,Jonathan Kuhn 在上面的提交中提供了以下代码。
<?php
//test 1 is defined, but has a value of null. isset will return false, use causes no error.
$test1 = null;
var_dump($test1);
var_dump(isset($test1));
echo "\n----------\n\n";
//test2 is defined with a string value. isset will return true
$test2 = "test";
var_dump($test2);
var_dump(isset($test2));
echo "\n----------\n\n";
//test3 is not defined, isset returns false and use causes error.
var_dump($test3);
var_dump(isset($test3));
将输出:
NULL
bool(false)
----------
string(4) "test"
bool(true)
----------
Notice: Undefined variable: test3 in /in/Nmk0t on line 17
NULL
bool(false)
【讨论】:
没问题。很高兴我能帮上忙!【参考方案2】:基本上是未声明、未赋值或未设置 NULL 的变量。
为了证明比较表,你可以用isset()
测试它
if (isset($var))
echo "it is set.";
【讨论】:
【参考方案3】:这个答案只是为了澄清更多关于truty/false
和isset()
函数的php,@thatguy 发布了一个很好的答案,这仅提供示例。
These are a few examples about how php works with true/false scenarios
检查该链接以获取此输出的代码。
你从一个带有这个变量的循环中得到这个输出:
$var1 = 0;
$var2 = 1;
$var3 = null;
$var4;
$var5 = false;
$var6 = true;
Examples about isset(), and truthy/falsy comparitions
-----------------------------------------------------
About isset() function
----------------------
var1 is declared and has a value, value = 0
var2 is declared and has a value, value = 1
var3 is declared with no value or is null
var4 is declared with no value or is null
var5 is declared and has a value, value =
var6 is declared and has a value, value = 1
----------------------
About true/false cases
----------------------
var1 is declared with no value, is null or equal to zero or false
var2 is declared and has a value, value = 1
var3 is declared with no value, is null or equal to zero or false
var4 is declared with no value, is null or equal to zero or false
var5 is declared with no value, is null or equal to zero or false
var6 is declared and has a value, value = 1
About asking to a never ever writen variable
--------------------------------------------
no idea where this variable is
no idea where this variable is
【讨论】:
【参考方案4】:这取决于您所说的“设置”。
如果您的意思是“我可以在我的代码中使用该变量而不会生成未定义的变量通知”,那么当变量具有任何值时就会设置该变量。你不能在 PHP 中声明一个变量而不给它一个值。例如:
<?php
$var;
不创建$var
变量。尝试将 $var
用于该行代码之后的任何内容都会给你一个未定义的变量通知,如果你 print_r(get_defined_vars());
你会得到一个空数组。
如果您的意思是“isset($var)
将返回true
”,那么当变量具有除null
之外的任何值时,它就会被设置。例如:
<?php
$varX = null;
$varY = 0;
有了这些变量,两者都被定义了。您可以在代码中使用它们而不会收到未定义的变量通知。 print_r(get_defined_vars());
将显示Array ( [varX] => [varY] => 0 )
。但是isset($varX)
会返回false
,即使$varX
已定义,因为它有一个null
值。
一旦你给一个变量赋值,它将在其范围内保持定义,除非你用unset($var)
明确取消它。
你可以声明一个变量而不显式赋值的唯一情况是它是一个类属性。例如:
class Example
public $var;
$ex = new Example;
var_dump($ex->var);
这里$var
在声明时被隐式赋值为null,在你的代码中引用它不会导致未定义变量通知。
【讨论】:
以上是关于设置 $var 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章