在php函数中使用未定义的变量

在php函数中使用未定义的变量,php,Php,我是PHP新手,正在处理可能有未定义变量的脚本,我有两种方法来处理这个问题,我的问题是什么是最好的方法 变量$\u GET['page']有时可以定义,有时可以不定义 我使用isset()检查的第一种方法是: 第二种方法是编写函数并使用@删除错误并在函数内部处理isset() function limitrows($page=1, $rows=10){ if (isset($page)==false or $page<=0 ){ $page=1;

我是PHP新手,正在处理可能有未定义变量的脚本,我有两种方法来处理这个问题,我的问题是什么是最好的方法

变量
$\u GET['page']
有时可以定义,有时可以不定义

我使用isset()检查的第一种方法是:

第二种方法是编写函数并使用
@
删除错误并在函数内部处理
isset()

 function limitrows($page=1, $rows=10){
       if (isset($page)==false or $page<=0 ){
         $page=1;
       }
  }

 $sql.=@limitrows($_GET['page'],10);
函数限制行($page=1,$rows=10){

如果(isset($page)=false或$page使用三元运算符

$sql.=@limitrows(isset($_GET['page'])?$_Get['page']:1,10);

格式[逻辑]?[真]:[假]

使用三元运算符

$sql.=@limitrows(isset($_GET['page'])?$_Get['page']:1,10);

格式化[逻辑]?[真]:[假]

一种可能是使用访问GET参数

$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT);
使用这种方法,
$page
将始终被设置,因此您无需担心未定义的索引警告。(如果
'page'
不是
$\u GET
中的键,
filter\u input
将返回
null

然后,当您以后需要使用
$page
时,检查它更简单:

function limitrows($page, $rows=10) {
    if (!$page) $page = 1;   // assuming you don't have a page 0, or
    // if ($page === null) $page = 1; // if you DO have a page 0
    // ... 
}

一种可能性是使用访问GET参数

$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT);
使用这种方法,
$page
将始终被设置,因此您无需担心未定义的索引警告。(如果
'page'
不是
$\u GET
中的键,
filter\u input
将返回
null

然后,当您以后需要使用
$page
时,检查它更简单:

function limitrows($page, $rows=10) {
    if (!$page) $page = 1;   // assuming you don't have a page 0, or
    // if ($page === null) $page = 1; // if you DO have a page 0
    // ... 
}

另一种方法是使用
array\u key\u exists
检查是否存在数组键。您可以使用
if
语句,也可以使用三元组缩短它

// with if
$page = 1;
if (array_key_exists('page', $_GET) === true) {
    $page = $_GET['page'];
}

// with ternary
$page = array_key_exists('page', $_GET) === true ? $_GET['page'] : 1;
不要使用
@
错误抑制运算符。在99.99%的时间内,您希望在所有情况下看到所有错误,这是一种不好的做法

编码中的“最佳方式”是观点、既定的代码风格和行业最佳实践的结合。一般来说,人们应该为工作使用正确的功能(在这种情况下,
数组\键\存在
过滤\输入
,如另一个答案所示),对正常代码流不使用错误处理、抑制或异常,并且显式/详细,而不是尝试使用最短的代码。您可能能够将某些内容压缩为一行而不是三行,但目的是什么?它只会增加代码任何给定部分的特定复杂性,使其他人(和您自己)更难处理理解和维护未来


关于在哪里做什么,收集函数外部的参数并验证函数内部的参数

文档/更多阅读

  • array\u key\u存在
    -
  • 三元运算符-
  • 正确的方法,请参阅:“内联错误抑制”——

另一种方法是使用
array\u key\u exists
检查是否存在数组键。您可以使用
if
语句,也可以使用三元组缩短它

// with if
$page = 1;
if (array_key_exists('page', $_GET) === true) {
    $page = $_GET['page'];
}

// with ternary
$page = array_key_exists('page', $_GET) === true ? $_GET['page'] : 1;
不要使用
@
错误抑制运算符。在99.99%的时间内,您希望在所有情况下看到所有错误,这是一种不好的做法

编码中的“最佳方式”是观点、既定的代码风格和行业最佳实践的结合。一般来说,人们应该为工作使用正确的功能(在这种情况下,
数组\键\存在
过滤\输入
,如另一个答案所示),对正常代码流不使用错误处理、抑制或异常,并且显式/详细,而不是尝试使用最短的代码。您可能能够将某些内容压缩为一行而不是三行,但目的是什么?它只会增加代码任何给定部分的特定复杂性,使其他人(和您自己)更难处理理解和维护未来


关于在哪里做什么,收集函数外部的参数并验证函数内部的参数

文档/更多阅读

  • array\u key\u存在
    -
  • 三元运算符-
  • 正确的方法,请参阅:“内联错误抑制”——

始终控制代码,然后使用isset和dontt掩码错误…(从不…)但是最终用try catch管理错误你的函数不会返回任何东西。chris85这不是完整的函数,我只放了我要求的,这是我应该如何使用“@”,但如果需要,我可以编写它返回的内容。代码工作正常唯一的问题是当我有未定义的变量时如何处理。:)始终控制代码,然后使用isset和dontt掩码错误…(从不…)但是最终用try catch管理错误你的函数不会返回任何东西。chris85这不是完整的函数,我只是把我要求的放在这里,这是我应该如何使用“@”,但如果需要,我可以编写它返回的内容。代码工作正常唯一的问题是当我有未定义的变量时如何处理。:)我喜欢这种方式,但你也是,using@没有它,它返回错误。我喜欢这种方式,但你也一样,使用@没有它,它返回错误。“收集函数外部的参数并验证函数内部的参数”我非常同意。没有必要通过将函数绑定到
$\u GET
或其他特定源来限制函数的可用性。“收集函数外部的参数并验证函数内部的参数”我非常同意。无需通过将函数绑定到
$\u GET
或其他特定源来限制函数的可用性。