我需要使用一个简单的函数:mysqli_num_rows(),但我想要更多的一般知识答案。
通过面向对象的样式$mysqli_result->num_rows;
或程序样式mysqli_num_rows( mysqli_result $result );
调用此函数之间是否存在任何差异?
我理解OO,as explained here, 正在访问变量,程序调用作为一个函数,但两者都返回相同的东西。
我公司的代码是程序性的,我们正在慢慢迁移到OOP,但它主要是混乱,因此没有任何我可以(或想要)遵循的内部指南。
答案 0 :(得分:5)
不,没有区别。程序方式几乎只是OO API的包装。从历史上看,它包含在内,允许OO完全神秘的开发人员从mysql API过渡到更好的替代方案。
对于所有意图和目的,mysqli_num_rows
执行此操作:
function mysqli_num_rows(mysqli_result $result) {
return $result->num_rows;
}
答案 1 :(得分:1)
主要区别仅在于您的首选风格。
在大多数情况下(可能全部),该功能是oo方式的“捷径”。
这两个电话是等价的:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
因为 - 基本上 - mysqli_connect
的定义是这样的:
function mysqli_connect( $host, $user, $pass, $db )
{
$conn = new mysqli( $host, $user, $pass, $db );
return $conn;
}
参见 - 例如 - 第3部分课程simple_html_dom
。面向对象的加载文件的方法是:
$dom = new simple_html_dom();
$data = file_get_contents( $url ) or die( 'Error retrieving URL' );
$dom->load( $contents ) or die( 'Error loading HTML' );
以上三行可以与程序调用一起浓缩:
$dom = file_get_html( $url ) or die( 'Error loading HTML' );
因为file_get_html
的内部代码如下(由我简化):
function file_get_html( $url )
{
$dom = new simple_html_dom();
$contents = file_get_contents( $url );
if( empty($contents) || strlen($contents) > MAX_FILE_SIZE )
{
return false;
}
$dom->load( $contents );
return $dom;
}
答案 2 :(得分:0)
区别在于一个是函数,另一个是方法。使用你想要的任何一个。
但是,如果您的公司正在慢慢迁移到OO方法,那么最好坚持使用对象。首先,这样做可以让你充分利用依赖注入。
<强>的index.php 强>
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/*
* Dependency Injection
*/
$userService = new UserService($db);
$users = $userService->getUsers();
<强> UserService.php 强>
<?php
class UserService
{
private $db;
public function __construct($db)
{
$this->db = $db;
}
public function getUsers()
{
if ($result = $this->db->query("SELECT username, city FROM users"))
return $result->num_rows;
else
return false;
}
}
这允许您重用对象。你在干嘛(不要重复自己)。
即使在程序代码中,使用mysqli
或PDO
对象也没有任何不利之处。您可以获得更清晰的代码。