';的含义是什么'';()';,和';:';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和“安全”漏洞开放。重复,,,等等。我尝试搜索>>