2016-12-03 79 views
0

我有一個頁面,用於檢索用戶數據並在頁面上顯示該數據。我的代碼工作得很好,但我無法理解何時使用OOP進行Web開發。我目前的頁面非常簡單,我的理解是OOP爲創建對象消耗了大量的處理能力。應該像這樣一個簡單的頁面需要使用OOP?在PHP中使用OOP從查詢中檢索數據

<?php 
    session_start(); 
    require $_SERVER['DOCUMENT_ROOT'] . "/connection.php"; 
    if ($_SESSION["id"] != ""){ 
     $result = $db->query(" 
      SELECT `Username`, `Image`, `FirstName`, `LastName`, `Type` 
      FROM Users WHERE `id` = '{$_SESSION['id']}' 
     "); 
     if ($result->num_rows == 0){ 
      $switch = false; 
     } else { 
      $resultSet = $result->fetch_array(); 
      $avatar = $resultSet["Image"]; 
      $account_type = $resultSet["Type"]; 
      $username = $resultSet["Username"]; 
      $fName = $resultSet["FirstName"]; 
      $lName = $resultSet["LastName"]; 
      $id = $_SESSION["id"]; 
      $switch = true; 
     } 
    } 
?> 

之後,信息顯示在HTML中。例如,當我想顯示名稱時,我只是將其回顯出來。像這樣echo "<p>$fName</p>";應該將這種方法改爲面向對象的方法嗎?或者,我的設計是否合適?

回答

1

我想你可以說一旦你的代碼變得更大,OOP變得更可取,但是從OOP開始對於可縮放性和易於理解的代碼來說總是一個不錯的選擇。

你在那裏基本上是一個帶有一個函數的文件,如果你想檢索與用戶有關的其他文件,你可能會創建另一個文件,並調用類似的東西。什麼,你可以有是這樣的:

class User { 
    private $id; 
    private $username; 
    private $firstName; 
    private $lastName; 
    private $type; 
    private $image; 

    function __construct($id) { 
     // TODO SQL stuff 

     $this->id = $id; 
     $this->username = // blahblah 
    } 
} 

而且它可以有各種功能(被稱爲一個類的方法),它都會在一個單獨的用戶類被隱藏起來。當你或者其他人正在寫一些代碼給項目時,他們不需要知道用戶的內部代碼,他們只需要知道你的方法在Y被放入時返回X,並且他們的代碼位可以只是:

$user = new User($id); 
return $user->doSomeMethod(); 

如果你想獲得用戶的全名以後,你不會需要做一個單獨的文件,做同樣的SQL的東西,你只需添加這是你的用戶裏面類(和增加了一些評論吧):

/** 
* Returns the proper case of the user's first and last names 
* @return String - full name of user 
*/ 
public function getFullName() { 
    return ucwords($this->firstName . " " . $this->lastName); 
} 

然後,你可以調用getFullName()在你的代碼的其餘部分用戶對象上。您不希望與相同主題(用戶)有關的代碼位於不同的區域,因此難以處理。

至於處理能力,我不太確定,但如果它有助於保持代碼乾爽(不要重複自己)並且容易理解,那麼使用OOP是個好主意。

+0

嗯,所以最終它只是使它在Web開發中使用OOP時更易讀,更好管理。對於我目前的項目,我已經將這個PHP文件包含在我的所有其他Web文件中。由於PHP變量可以在整個文件中使用,所以我只需要在需要時調用它們。例如,如果我想顯示圖像,我只是說'echo「 Bytes

+0

如果我創建了一個完整的與操作和顯示用戶數據相關的函數的類,並且包含這個類文件到我的網站的每一頁,不會因爲增加額外的代碼而降低性能?假設我想在某個頁面上只顯示用戶的名字,並且我添加了這個類文件,如果我只想檢索用戶的名字,這個類文件是不是開銷? – Bytes

+0

那麼OOP並不是一切的解決方案,對於某些事情來說,它可能會犧牲性能來提高效率,就像你不會編寫幾乎相同的函數一樣,因爲它們的運行速度要快於另外一個裏面的邏輯。 – Maytch

1

也許是個人喜好,但我不會使用任何資源來複制變量。

我會使用響應$ resultSet。要使用變量我想:

echo $resultSet["LastName"]; 

如果這是必須要遵守的變量,那麼也許使用關聯數組,並使用循環:

foreach ($resultSet AS $k => $v { 
    ${$k} = $v; 
} 

根據在數據庫中的列名會成爲變量名稱。