1

这是我很好奇的事情。在 php mysqli 中,我可以对未知的类名执行操作功能,例如:

$res = $mysqli->query($query);
$res->fetch_array();

那就是已知的 fetch_array 的名称,但是res变量。我想知道它是如何实现的。抱歉,谷歌翻译草率。

4

3 回答 3

2

如果我正确理解了您的问题,那么答案是mysqli::query方法返回的对象是类mysqli_result的实例。这个类有方法fetch_array()

此外,您可能对函数get_class感兴趣。

于 2013-09-15T18:26:39.617 回答
1

在此行之前:

$res = $mysqli->query($query);

肯定有mysqli连接:

$mysqli = new mysqli("localhost", "user", "password", "database");

从这里,mysqli是一个由 PHP 提供的为你准备好的类,考虑它是这样的:

class mysqli{

}

的,$res$mysqli->query($query);其中的副本:

querymysqli类(一个函数)的一个属性,我们这样做是为了复制mysqli查询的结果,即资源为(成功),失败为假。

你也可以这样组合:

$row = $mysqli->query($query)->fetch_array();
print_r($row);
于 2013-09-15T18:26:53.613 回答
0

我的猜测是

class MySQLi{
/* other code */
public function query($query){
// some code
return new MySQLiResult(); // Don't know if that's the real class name
}
}

结果应该是这样的

class MySQLiResult{
public function fetch_array(){
return array();
}
}

请注意,我只写了虚构的代码。我真的不知道,类名是什么。这只是对其外观的粗略估计。

于 2013-09-15T18:23:21.163 回答