PHP 定义 var = 一个或另一个(又名 : $var=($a||$b);)

标签 php variables operators

有没有办法像在 javascript 中那样将 php 变量定义为一个或另一个?

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 变量,我想存储它以供以后在 session 中使用。我想要完成的是将 $x 设置为 $_POST['x'] 的值,如果存在,然后检查并使用 $_SESSION[ 'x'] 如果它存在,如果它们都没有设置则保留 $x undefined;

$x = ($_POST['x'] || $_SESSION['x');

根据 http://php.net/manual/en/language.operators.logical.php

$a = 0 || 'avacado'; print "A: $a\n";

will print:

A: 1

in PHP -- as opposed to printing "A: avacado" as it would in a language like Perl or JavaScript.

This means you can't use the '||' operator to set a default value:

$a = $fruit || 'apple';

instead, you have to use the '?:' operator:

$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);

最佳答案

一个更简单的方法是创建一个可以接受变量的函数。

 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 接受可变数量的变量指针 (&...) 并循环遍历每个检查是否已设置,将返回遇到的第一个已设置的变量。

关于PHP 定义 var = 一个或另一个(又名 : $var=($a||$b);),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837372/

相关文章:

Php mysqli 和存储过程

php - 转换为数组后,删除字符串上的元素不起作用

c# - 运算符 '&&' 不能应用于类型 'int' 和 'bool' 的操作数

php - 限制访问我网站上的图像,除非通过我自己的 html

php - 在 CentOS7 上安装 Xdebug,出现错误 undefined symbol : compiler_globals

javascript - 将一个表单的值复制到第二个表单的隐藏字段中

variables - 将伴侣(婴儿)变量的值复制到原始(母亲)

r 获取具有最大值的变量名

c++ - 运算符重载的基本规则和惯用法是什么?

Python a &= b 是什么意思?