2013-11-20 75 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