Php 如果$value是truthy,则返回$value,否则返回其他内容

Php 如果$value是truthy,则返回$value,否则返回其他内容,php,Php,我知道你能做到这一点 $var = mysql_query("SELECT * FROM..") ? mysql_query("SELECT * FROM.."):'Nope!'; // the same as this if(mysql_query("SELECT * FROM..")) $var = mysql_query("SELECT * FROM.."); else $var = 'Nope!'; 但这很不方便,因为如果它是一个返回数组或false并可能更新表中某些数据的函数,该

我知道你能做到这一点

$var = mysql_query("SELECT * FROM..") ? mysql_query("SELECT * FROM.."):'Nope!';

// the same as this

if(mysql_query("SELECT * FROM..")) $var = mysql_query("SELECT * FROM..");
else $var = 'Nope!';
但这很不方便,因为如果它是一个返回数组或false并可能更新表中某些数据的函数,该怎么办。所以我想知道是否有什么办法可以做到

$var = mysql_query("SELECT * FROM..") ? $returnOfFunction:'Nope!';
像这样的

$var = mysql_query("SELECT * FROM..") || 'Nope!';
但在php中,这意味着如果这是真的,或者这是真的,那么我就是真的

我希望有人能理解我的想法

编辑: 这样行吗

function pickTrue($one, $two) {
  if($one == true) return $one;
  else return $two;
}

$var = pickTrue(mysql_query("SELECT * FROM table"), 'Nope');

您需要-不带中间部分,从PHP5.3开始就可以使用。

不要这样编写代码。mysql_查询的结果并不总是可以比较的布尔值。您还将丢失查询数据库时可以执行的任何错误消息和错误处理


简短回答:是的。详细回答:不要使用
操作符,而不是
|
。它具有较低的绑定首选项。e、 g

$result = mysql_query($sql) || die(mysql_error()); // always kills the script
v.s.
$result = mysql_query($sql) or die(mysql_error()); // kills the script ONLY if the query returns false
但是,不要使用这种复杂的代码。减少行数是一件好事,但当它使可读性受损时,这是一件可怕的坏事

主要问题是
SELECT
查询要么返回布尔值false(查询/db失败),要么返回结果集。在实际检索并检查一行数据之前,您无法知道结果集是什么。e、 仅仅因为查询调用返回了一个非false值,并不意味着查询实际上成功了。不返回数据的查询仍然是有效查询

例如考虑登录系统,并且检查帐户是否存在:

$sql = "SELECT id FROM users WHERE username=Some_username_that_doesnt_exist";
$exists = mysql_query($sql) or "Nope!";
该查询完全有效,但由于用户名不存在,因此将返回一个空结果集。这是一个非错误的结果,因此不会触发
或Nope
。现在代码认为用户名存在,然后poof。。。您的代码路径不正确。

  • 首先,不要使用
    mysql.*
    函数。他们被弃用了
  • 其次,
    mysql\u query
    返回您必须从中获取的资源。让一个变量包含资源或字符串是不好的做法
这里有一个更好的方法:

$q= 'SELECT a, b, c FROM mytable';
if($r= $db->query($q)){
  $success = 'yep';
  while($row = $r->fetch_assoc()) {
    //do stuff
  }
} else {
  $success = 'nope';
}

把重点放在使你的代码可读性上。换句话说,这类技巧除了使你的代码难以理解之外,什么也做不了
if
/
else
用于teh win。整个问题闻起来像是一个熟悉函数式编程的人试图使用PHP,却不明白为什么它不起作用。我无意冒犯任何人,但这里的问题不只是操作。我几个月前就开始使用OOP。。使用toI需要一点时间。以mysql_查询为例,除了php保证布尔运算的结果是布尔运算外,其他任何函数都可以使用。因此,如果
mysql\u query($sql)
返回布尔值
false
或结果集,
$result=mysql\u query($sql)或其他内容()保证为false。捕获
die()
的返回值根本没有意义。或和| |之间有区别吗?听起来有点像odd@Dremp对这很奇怪。唯一的区别是优先级。@dremp:我知道,谢谢,我刚刚开始学习PDO。当我使用mysql\u query、mysql\u fecth\u object和mysql\u num\u rows时,我究竟是如何生活的呢?公平地说,让一个变量或函数具有多种类型是一种标准的php实践。不是一个好的,只是一个。