我有两个变量定义,我试图理解两者之间的差异,所以我可以将它们合并为一个。两个PHP变量定义之间的差异
PHP定义1:
$page = $_GET['page'];
PHP定义2:
$page = 0;
if(isset($_GET['page'])){
$page = (int) $_GET['page'];
}
我有两个变量定义,我试图理解两者之间的差异,所以我可以将它们合并为一个。两个PHP变量定义之间的差异
PHP定义1:
$page = $_GET['page'];
PHP定义2:
$page = 0;
if(isset($_GET['page'])){
$page = (int) $_GET['page'];
}
你的第二个定义将会抑制当$_GET['page']
没有被设置为不试图将其分配给任何东西时遇到的任何错误。
第二个定义中的(int)
部分会将$_GET['page']
转换为整数值。这会阻止你可能得到的任何攻击,尽管你应该小心。
最后,$page = 0
只是设置为$page
的默认值。如果$_GET
中没有值,则$page
的值将保持为0
。这也确保了$page
总是被设置,如果你在你的代码片段下面的代码中使用它。
我不知道你的意思是merge them into one
;第二个片段是第一个片段的扩展(和改进)。
的第一码块分配给$page
任何值是在$_GET['page']
。
第二个分配默认值0
到$page
。并且if
语句将首先检查$_GET['page']
是否已设置(以避免警告)。如果确实设置,它会将$_GET['page']
的值转换为整数并将其分配给$page
。
所以如果第一个没有被定义为一个整数,它是什么定义为? – stefmikhail
@stefmikhail:PHP不是强类型的,所以(假设传入一个整数)它仍然会被看作是一个整数。由于它在URL(GET)变量中并且可以很容易地操作,因此演员阵播“清理”来自用户的输入。 –
@stefmikhail:它将是'$ _GET ['page']'包含的值。如果它包含'123abc',那将分配给它。但是,第二个将会为其分配'123'。阅读[字符串转换为数字](http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion)了解完整的详细信息。 – Shef
我个人使用:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 0;
或者array_key_exists。
如果OP不能理解问题中的两个代码片段,那么您如何期望OP没有解释地理解您的答案? –
所以我应该能够使用第二个代替第一个,它应该工作正常吗? – stefmikhail
这是正确的,提供第二段代码给你你想要的功能(只从'$ _GET ['page']'中取整数)。 – Bojangles
较短的版本也可以包含'$ page =(isset($ _ GET ['page'])?(int)$ _ GET ['page]:0);' –