【问题标题】:Is it safe to use a variable without make it null first in Php?使用变量而不首先在Php中使其为空是否安全?
【发布时间】:2015-09-19 22:08:03
【问题描述】:

我现在总是在 php 中将我的变量设置为 null,但在过去我只是为它们分配了值,而没有先将它们设置为 null。这些变量是内部使用变量,因此它们仅从数据库或 php 中获取内容,而不是从用户输入中获取内容。我可以这样离开它们,还是应该让它们都为空?我需要确保我的脚本是安全的。

谢谢你的帮助,对不起我的英语!

【问题讨论】:

  • 根据文档:一个变量被认为是空的,如果:它被分配了常量 NULL 或者它还没有被设置为任何值或者它已经被 unset()。所以是的,使用空变量而不使其为空是安全的。 php.net/manual/en/language.types.null.php
  • 首先将变量声明为 NULL 是不必要的,你不这样做是安全的。编译器知道该怎么做。

标签: php


【解决方案1】:

在您的标题中,您询问是否可以安全地使用一个变量而不先使其为空。但是,在您的问题正文中,您询问是否可以为变量赋值而不首先使它们为空。

如果您尝试将值分配给变量而不使它们为空,那很好。

$x = 1;
$y = 2;
$z = $x + $y; // 3

如果你想使用变量而不使它们为空,PHP 将consider them null by default

echo(is_null($a) ? "true" : "false"); // true
echo($a === null ? "true" : "false"); // true

但是,如果您尝试使用它们而不将其分配为 null,则会收到 E_NOTICE。

$a = 1;
$c = $a + $b; // 1

PHP 注意:未定义变量:b in ...

虽然这在 PHP 5 上不是问题,但如果您使用的是 PHP4,则应该担心。这可能是security concern ,因为在 PHP 4 中默认启用了register_globals 指令。

register_globals 指令本质上允许任何人通过请求设置变量。 $_REQUEST 数组中的元素会自动注册为变量,如果您不自己将它们设置为 null。

【讨论】:

  • 谢谢。我在 php 5 上,但默认情况下我会关闭 register_globals。我认为我需要重写整个代码并使所有变量为空。
  • @user2921777 如果您使用的是 PHP 5.4.0 或更高版本,则 register_globals 已被删除,因此您不必担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2012-02-10
  • 1970-01-01
  • 2021-05-03
  • 2019-04-01
相关资源
最近更新 更多