Php 为什么可以';我们不能直接从函数返回mysqli对象吗?对象必须先存储在变量中?

Php 为什么可以';我们不能直接从函数返回mysqli对象吗?对象必须先存储在变量中?,php,mysql,Php,Mysql,我正在读一本关于PHP的书,对这个例子有一个问题: <?php function dbConnect() { $host = 'localhost'; $db = 'learnphp'; $user = 'phplearner'; $pwd = 'wxyz1234'; return new mysqli($host, $user, $pwd, $db) or die("Can't open database"); } $conn = dbConnec

我正在读一本关于PHP的书,对这个例子有一个问题:

<?php
function dbConnect() {
    $host = 'localhost';
    $db = 'learnphp';
    $user = 'phplearner';
    $pwd = 'wxyz1234';
    return new mysqli($host, $user, $pwd, $db) or die("Can't open database");
}
$conn = dbConnect();
$sql = 'SELECT * FROM images';
$result = $conn->query($sql);
$numRows = $result->num_rows;
?>
<p>A total of <?php echo $numRows; ?> records were found.</p>
致:

它工作正常:

共发现8项记录

为什么我不能像示例那样使用
返回新的mysqli(…)
?这是PHP5.4+的新编码要求吗?

与return语句一起使用的
[…]或die()

因为
new mysqli
永远不会为false,所以“die”永远不会被处理,因此,您的函数返回
true
,而不是新创建的
mysqli
实例

编辑:

如果仍要使用
或die()
,请执行以下操作:

$result = new mysqli($host, $user, $pwd, $db) ;
if (!$result) die ("Can't open database.");
return $result;
改变这个

return new mysqli($host, $user, $pwd, $db) or die("Can't open database");
对此

return mysqli_connect($host, $user, $pwd, $db) or die("Can't open database");

我卸下了
或模具(..)
,它可以工作了!从示例中,我们应该使用什么来代替
或die(..)
?@weeix此行为的原因是运算符优先级
=
之前求值,但
return
在两者之后求值。所以
$foo=$bar或die()
。整个表达式的结果都是相同的布尔值
true
,但作为该操作的一部分,
$bar
已分配给
$foo
,没有人关心这里的表达式值。实际上,我遇到了这种错误。我刚刚退出使用query()并继续使用mysqli\u query()。
return new mysqli($host, $user, $pwd, $db) or die("Can't open database");
return mysqli_connect($host, $user, $pwd, $db) or die("Can't open database");