【问题标题】:Using OOP in PHP with retrieving data from query在 PHP 中使用 OOP 从查询中检索数据
【发布时间】:2017-04-18 12:48:35
【问题描述】:

我有一个页面可以检索用户数据并在页面上显示该数据。我的代码运行良好,但我无法理解何时使用 OOP 进行 Web 开发。我当前的页面很简单,我的理解是OOP在创建对象时消耗了大量的处理能力。像这样的简单页面是否需要使用 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 "&lt;p&gt;$fName&lt;/p&gt;"; 应该将这种方法改为面向对象的方法吗?或者我的设计是否合适?

【问题讨论】:

    标签: php mysql sql oop


    【解决方案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
        }
    }
    

    它可以有各种各样的功能(称为类中的方法),并且它们都将被隐藏在一个单独的 User 类中。当你或其他人在项目中编写代码时,他们不需要知道 User 的内部代码,他们只需要知道你的方法在输入 Y 时返回 X,他们的代码可以只是:

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

    如果您想稍后获取用户的全名,则不需要创建一个单独的文件来执行相同的 SQL 内容,您只需将其添加到您的 User 类中(并添加一些 cmets 到它):

    /**
    *   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 是一个好主意。

    【讨论】:

    • 嗯,所以最终它只是让它在 Web 开发中使用 OOP 时更具可读性和更好的管理。对于我当前的项目,我一直将这个 PHP 文件包含在我的所有其他 Web 文件中。由于 PHP 变量可以在整个文件中使用,所以我会在需要时调用它们。例如,如果我想显示图像,我只需说echo "&lt;img src='/media/assets/$avatar&gt;"; 并显示图像。我不明白制作函数返回这些变量的必要性,这就是为什么我很难在我的代码中实现 OOP
    • 如果我创建了一个类,其中包含与操作和显示用户数据相关的功能,并将这个类文件包含到我网站的每个页面中,是否会因为添加额外的代码而降低性能?假设我想在某个页面上只显示用户名,并且我添加了该类文件,如果我只想检索用户名,类文件会不会是开销?
    • 好吧,OOP 并不是所有事情的解决方案,而且对于某些事情,它可能会为了效率而牺牲性能,就像你不会编写 5 个几乎相同的函数一样,因为它们会单独运行速度比其中包含额外逻辑的速度更快。
    【解决方案2】:

    也许是个人喜好,但我不会使用任何资源来复制变量。

    我会使用响应 $resultSet。要使用该变量,我会:

    echo $resultSet["LastName"];
    

    如果必须使用变量,那么也许使用关联数组,并使用循环:

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

    根据数据库中列的名称将成为变量名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多