2013-11-20 29 views
-1

我在玩php和mysql,碰到两种不同的连接方式。我可以使用OOP风格或程序风格。我是OOP的新手。面向对象编程与程序风格编程

查看文档(http://us1.php.net/manual/en/mysqli.construct.php )时,它在下面显示了以下面向对象的风格。

<?php 

class foo_mysqli extends mysqli { 
    public function __construct($host, $user, $pass, $db) { 
     parent::__construct($host, $user, $pass, $db); 

     if (mysqli_connect_error()) { 
      die('Connect Error (' . mysqli_connect_errno() . ') ' 
        . mysqli_connect_error()); 
     } 
    } 
} 

$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

echo 'Success... ' . $db->host_info . "\n"; 

$db->close(); 
?> 

我的问题是关于行:

if (mysqli_connect_error()) { 

是不是使用OOP风格中程序的风格?如果您不使用OOP风格,那么这就是您要使用的功能。它不应该是这样的:

if (mysqli::connect_error()) { 

if (parent::connect_error()) { 

我都尝试,但他们没有工作。

回答

0

因为在OOP中mysqli(和你的foo_mysqli)是一个名为connect_error的PROPERTY对象(请注意docs中$ mysqli-> connect_error缺少括号)。所以试图调用一个函数并没有给你任何东西 - 检查对象的属性。

此外 - 仔细阅读文档确实有帮助。

+0

所以我应该可以在mysqli_connect_error()的同一个地方使用$ mysqli-> connect_error? ...我尝试过,并得到一个不同的错误信息。 – user3015018

+0

好的......我错过了上面所说的“这是官方的OO方式”的代码上面的所有部分,但是$ connect_error被破坏,直到PHP 5.2.9和5.3.0。“,这表明$ mysqli-> connect_error应该工作...但是,我在PHP 5.3.3和$ connect_error似乎仍然被打破。 – user3015018

+0

当你考虑编程风格时,你也可以考虑内存系统。意思是OOP语言如何处理过程语言的内存...... – BDR