Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';的含义是什么'';()';,和';:';PHP中的符号?_Php_Variables_Definition - Fatal编程技术网

';的含义是什么'';()';,和';:';PHP中的符号?

';的含义是什么'';()';,和';:';PHP中的符号?,php,variables,definition,Php,Variables,Definition,我终于记起该问什么了。我从来没有真正得到什么:和?当变量定义如下时,请执行以下操作: $ip = ($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; $var = (condition) ? if_true : if_false 正如你所看到的那样?和:() 有谁能给我一个简短的细节,告诉我为什么以及如何使用它们吗?这个表达式如下: $ip = ($_

我终于记起该问什么了。我从来没有真正得到什么:和?当变量定义如下时,请执行以下操作:

$ip = ($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
$var = (condition) ? if_true : if_false
正如你所看到的那样?和:()


有谁能给我一个简短的细节,告诉我为什么以及如何使用它们吗?

这个表达式如下:

$ip = ($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
$var = (condition) ? if_true : if_false
?:
。如果
条件
为真,将为
$var
赋值
如果为真
;否则,如果_false,将为其分配值

在您的特殊情况下:

  • 这将
    X-Forwarded-For
    HTTP头的值分配给
    $ip
    (如果存在);否则,它将使用远程地址本身

  • 这通常用作获取客户端IP地址的一种方法。但是,请注意,一般来说,这是一种检查客户身份的糟糕方法。请参见。(如果需要确保用户不会互相攻击,请使用会话cookie或某种身份验证。)

  • 另外,它是
    HTTP\ux\uforwarded\u FOR
    ,而不是
    HTTP\ux\uforward\u FOR

  • 最后,
    HTTP\u X\u FORWARDED\u FOR
    可以是一个以逗号分隔的IP地址列表,而不仅仅是一个IP地址列表,因此这可能是一个bug


它被称为三元运算符,是(在您的情况下)的缩写:

表达式(expr1)?(expr2):(expr3)如果expr1计算为TRUE,则计算为expr2;如果expr1计算为FALSE,则计算为expr3

请参见此示例:

<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// The above is identical to this if/else statement
if (empty($_POST['action'])) {
    $action = 'default';
} else {
    $action = $_POST['action'];
}

?>

三元形式基本上是if->then->else的快捷方式

我通常避免使用它,因为它不那么可读

$ip = ($_SERVER['HTTP_X_FORWARD_FOR']) ? $_SERVER['HTTP_X_FORWARD_FOR'] : $_SERVER['REMOTE_ADDR'];
逻辑上等同于:

if($_SERVER['HTTP_X_FORWARD_FOR']){
   $ip = $_SERVER['HTTP_X_FORWARD_FOR'];
}else{
   $ip = $_SERVER['REMOTE_ADDR'];
}

应该说,这正是最常用的:变量初始化。非常常见于表单数据。

非常简短。接受的答案,也很好的提示:)你介意在一个逻辑语句中简单介绍一下多个三元运算符吗。这将有助于其他人+1@RobertPitt当前位置简短的建议是:不要这样做!嵌套的三元运算符很快就会变成笨拙、不可理解、不可维护的代码。+1,我不得不提到,X-Forwarded-For和其他头一样,完全是虚构的。只需在标题中这样说,就可以将
$ip
设置为
127.0.0.1
。因此,这段代码将对“正常”bug和“安全”漏洞开放。重复,,,等等。我尝试搜索>>