2011-08-21 42 views
0

我有两个变量定义,我试图理解两者之间的差异,所以我可以将它们合并为一个。两个PHP变量定义之间的差异

PHP定义1:

$page = $_GET['page']; 

PHP定义2:

$page = 0; 
if(isset($_GET['page'])){ 
    $page = (int) $_GET['page']; 
} 

回答

5

你的第二个定义将会抑制当$_GET['page']没有被设置为不试图将其分配给任何东西时遇到的任何错误。

第二个定义中的(int)部分会将$_GET['page']转换为整数值。这会阻止你可能得到的任何攻击,尽管你应该小心。

最后,$page = 0只是设置为$page的默认值。如果$_GET中没有值,则$page的值将保持为0。这也确保了$page总是被设置,如果你在你的代码片段下面的代码中使用它。

我不知道你的意思是merge them into one;第二个片段是第一个片段的扩展(和改进)。

+0

所以我应该能够使用第二个代替第一个,它应该工作正常吗? – stefmikhail

+1

这是正确的,提供第二段代码给你你想要的功能(只从'$ _GET ['page']'中取整数)。 – Bojangles

+1

较短的版本也可以包含'$ page =(isset($ _ GET ['page'])?(int)$ _ GET ['page]:0);' –

1

的第一码块分配给$page任何值是在$_GET['page']

第二个分配默认值0$page。并且if语句将首先检查$_GET['page']是否已设置(以避免警告)。如果确实设置,它会将$_GET['page']的值转换为整数并将其分配给$page

+0

所以如果第一个没有被定义为一个整数,它是什么定义为? – stefmikhail

+1

@stefmikhail:PHP不是强类型的,所以(假设传入一个整数)它仍然会被看作是一个整数。由于它在URL(GET)变量中并且可以很容易地操作,因此演员阵播“清理”来自用户的输入。 –

+1

@stefmikhail:它将是'$ _GET ['page']'包含的值。如果它包含'123abc',那将分配给它。但是,第二个将会为其分配'123'。阅读[字符串转换为数字](http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion)了解完整的详细信息。 – Shef

0

我个人使用:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 0; 

或者array_key_exists。

+1

如果OP不能理解问题中的两个代码片段,那么您如何期望OP没有解释地理解您的答案? –