有没有办法将php变量定义为一个或另一个,就像你在javascript中var x = (y||z)
一样?
Get the size of the screen, current web page and browser window。
var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
我发送了一个post变量,我希望将其存储起来供以后在会话中使用。我想要完成的是将$x
设置为$_POST['x']
的值,如果存在,则检查并使用$_SESSION['x']
(如果存在)并且如果两者都未定义$x
它们已经确定;
$x = ($_POST['x'] || $_SESSION['x');
根据http://php.net/manual/en/language.operators.logical.php
$ a = 0 || '阿瓦克&#39 ;;打印" A:$ a \ n&#34 ;;
将打印:
A:1
PHP中的- 而不是打印" A:avacado"就像在一个 像Perl或JavaScript这样的语言。
这意味着您无法使用' ||'运算符设置默认值:
$ a = $ fruit || '苹果&#39 ;;
相反,你必须使用'?:'操作者:$ a =($ fruit?$ fruit:' apple');
所以我必须使用额外的,如果封装?:操作如下:
if($_POST['x'] || $_SESSION['x']){
$x = ($_POST['x']?$_POST['x']:$_SESSION['x']);
}
或同等的工作:
if($_POST['x']){
$x=$_POST['x'];
}elseif($_SESSION['x']){
$x=$_SESSION['x'];
}
我没有测试这些论文,但我认为它们也会起作用:
$x = ($_POST['x']?$_POST['x']:
($_SESSION['x']?$_SESSION['x']:null)
);
对于更多变量,我会选择一个函数(未测试):
function mvar(){
foreach(func_get_args() as $v){
if(isset($v)){
return $v;
}
} return false;
}
$x=mvar($_POST['x'],$_SESSION['x']);
在php中实现相同的任何简单方法吗?
编辑澄清:在我们想要使用许多变量$x=($a||$b||$c||$d);
答案 0 :(得分:2)
是的,您需要使用您在示例中使用的简单ternary
运算符以及PHP的其他一些函数,例如PHP的isset
或empty
函数。因此,您的变量$x
将分别赋值
示例强>
$x = (!empty($_POST['x'])) ? $_POST['x'] : (!empty($_SESSION['x'])) ? $_SESSION['x'] : NULL;
因此,上述函数描述了如果您的$_POST['x']
设置为
$x = $_POST['x'];
否则它会检查$_SESSION
的下一个值,如果它的设置然后$x
的值将是
$x = $_SESSION['x'];
否则最后的值将是
$x = null;// you can set your predefined value instead of null
$x = (!empty($a)) ? $a : (!empty($b)) ? $b : (!empty($c)) ? $c : (!empty($d)) ? $d : null;
如果您需要一个功能,那么您可以简单地实现它
$a = '';
$b = 'hello';
$c = '';
$d = 'post';
function getX(){
$args = func_get_args();
$counter = 1;
return current(array_filter($args,function($c) use (&$counter){ if(!empty($c) && $counter++ == 1){return $c;} }));
}
$x = getX($a, $b, $c, $d);
echo $x;
答案 1 :(得分:2)
我设法为你创造了一个能够达到你想要的功能的功能,允许你提供无限的争论和提取:
function _vars() {
$args = func_get_args();
// loop through until we find one that isn't empty
foreach($args as &$item) {
// if empty
if(empty($item)) {
// remove the item from the array
unset($item);
} else {
// return the first found item that exists
return $item;
}
}
// return false if nothing found
return false;
}
要理解上述功能,请阅读上述评论。
用法:
$a = _vars($_POST['x'], $_SESSION['x']);
这是你的:
这是一个非常简单的三元操作。您只需要先检查帖子,然后在以下后检查会话:
$a = (isset($_POST['x']) && !empty($_POST['x']) ?
$_POST['x']
:
(isset($_SESSION['x']) && !empty($_SESSION['x']) ? $_SESSION['x'] : null)
);
答案 2 :(得分:1)
更简单的方法是创建一个可以接受变量的函数。
public function getFirstValid(&...$params){
foreach($params as $param){
if (isset($param)){
return $param;
}
}
return null;
}
然后初始化一个我想做的变量......
var $x = getFirstValid($_POST["x"],$_SESSION["y"],$_POST["z");
结果将是var x将分配设置的第一个变量,或者如果没有设置任何变量,则设置为null。
说明:
函数getFirstValid接受可变数量的变量指针(& ...)并循环检查是否设置,将返回遇到的第一个变量。
答案 3 :(得分:1)
PHP 7解决方案:
??
运算符。 $x = expr1 ?? expr2
。
https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
答案 4 :(得分:0)
这很简单 -
$x = (!empty($_POST['x']) ? $_POST['x'] :
(!empty($_SESSION['x']) ? $_SESSION['x'] : null)
);