1

快速提问。我在教程中看到简单的 if 语句是这样写的:

if($vest) echo $vest->naslov

但是当我这样写时,我得到一个错误 Undefined variable: vest并且我必须以旧方式编写代码:

if(isset($vest)) echo $vest->naslov

php.ini文件中是否有任何设置来规范这一点?目前我在 Ubuntu(最新版本)上使用 LAMP。

4

6 回答 6

4

你有E_STRICT,如果你在检查变量之前没有声明变量,它会抱怨。您可以通过关闭E_STRICTin来解决此问题php.ini,但更好的主意是提前声明变量 - 只需在函数顶部执行此操作:

$vest = null;

在你的其他逻辑之前。这是一种很好的做法,因为它迫使您以更接近现实的方式思考程序的执行方式。

于 2012-11-23T20:29:57.950 回答
2

您可以降低error_reportingE_ALL ^ E_NOTICE,但这实际上是一种不好的做法,可能会导致很多难以追踪的错误。如果$vest是一个错字,你不会知道,你的条件永远不会奏效。

相反,尝试构建您的应用程序,以便您始终知道哪些变量已定义,哪些未定义。然后,您可以放心使用速记版本。

于 2012-11-23T20:29:18.283 回答
1

我会说最好将变量声明为负状态,然后 - 如果它们没有设置,或者它们被设置为 false 那么 - 速记if将按照你的意图行事。

忽略错误是不好的(它们的存在是有原因的,并且您的代码将更具可读性,因此可维护)。

于 2012-11-23T20:34:19.930 回答
1

if($foo)if(isset($foo))不是一回事,不应该互换使用。

if($foo)检查$foo计算结果是否为真。另一种写作方式是:if( (bool) $foo === true ). 因此,如果$foo未定义,则需要来自 PHP 的通知。

与其像某些人建议的那样关闭通知,不如以正确的方式编写代码。要检查是否$foo已定义,请始终使用isset().

于 2012-11-23T20:40:05.140 回答
1

Undefined variable: vest错误意味着$vest无法识别变量。isset($vest)不产生错误的原因是因为isset()检查是否$vest已经设置。因此 if(isset($vest)) 将对isset($vest).

如果您只使用if($vest),php 将假定$vest已设置(实际上$vest仍然未定义)并执行布尔检查操作。

于 2012-11-23T20:29:46.943 回答
1

您可以调低错误报告级别并忽略错误,但这将是危险的编程实践。

当你输入这个:if($vest)时,你真的是指$vest==nullor $vest==''or or or $vest===''or isempty($vest)or $vest===trueor isset($vest)`?

if 语句有很多用途;您应该在代码中明确说明您在做什么。在脚本顶部初始化变量真的很难吗?

于 2012-11-23T20:33:14.567 回答