PHP函数作为if语句中的参数(面向对象)

时间:2015-07-19 15:09:13

标签: php mysql oop

当我运行时:

if ($result->num_rows() > 0) {                                    
    while($row = $result->fetch_assoc()) {                     
            echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";   
    }
} else {
    echo "0 results";
}
$conn->close();

我收到以下错误:

  

调用未定义的方法mysqli_result :: num_rows()

我认为错误来自num_rows()方法,但无法弄清楚出了什么问题。据我所知,对象在OOP中使用$obj->foo()来调用方法,但是当我删除num_row的括号时:

if ($result->num_rows > 0) {                                    
    while($row = $result->fetch_assoc()) {                     
            echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";   
    }
} else {
    echo "0 results";
}
$conn->close();

这段代码按预期运行。

1 个答案:

答案 0 :(得分:0)

第二个代码块工作的原因是因为num_rows是对象的属性。使用num_rows()作为方法会导致未定义的方法错误,因为该名称没有方法。

一个例子:

class Dog {
    public weight;
    public age;

    public function __construct($weight, $age)
    {
        $this->weight = $weight;
        $this->age = $age;
    }

    public function bark()
    {
       ...
    }

    public function gain_weight()
    {
       $this->weight++;
    }
}

$dog = new Dog(10, 0);
$dog->gain_weight();
echo $dog->weight;

gain_weight是一种方法,但weight$dog对象的属性。

在旁注中,if ($result->num_rows > 0)if ($result->num_rows)相同,因为如果$result->num_rows等于0,则语句将评估为false。