我正在阅读一本关于 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>

它不在我的本地服务器(XAMPP 1.8.1;PHP 5.4.7;mysqlnd 5.0.10 - 20111026;MySQL 5.5.27)中运行 - 出现以下错误消息:



但是,当我更改此行时:
    return new mysqli($host, $user, $pwd, $db) or die("Can't open database");

至:
    $mysqliobj = new mysqli($host, $user, $pwd, $db) or die("Can't open database");
    return $mysqliobj;

它正常工作:



为什么我不能像示例一样使用 return new mysqli(...)?这是 PHP 5.4+ 的新编码要求吗?

最佳答案

[..] or die() 构造结合 return 语句会导致有趣的行为:整个事情被解释为一个 bool 表达式。

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

编辑:

如果您仍然想使用 or die() ,请执行以下操作:

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

关于php - 为什么我们不能直接从函数返回一个 mysqli 对象?对象必须先存储在变量中吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18097440/

10-16 11:26