【问题标题】:Ways to use OOP principles to organise code for web application?使用 OOP 原则组织 Web 应用程序代码的方法?
【发布时间】:2017-06-23 22:56:34
【问题描述】:

我正在设计我的第一个 Web 应用程序,我正在寻找一些关于如何在其中实施 oop 原则的建议。

基本上,该应用由许多使用 Jquery ajax 填充选项的级联下拉选择组成,以便构建 sql 语句以返回一组特定的数据(包括执行一些计算)。

到目前为止,我构建它的方式是脚本标记中的许多 JS 函数,用于带有相应事件处理程序的 ajax 调用。例如:

$('#show_result').on('click', getResult);

function getResult() {
    alert( "Results displayed" );

    $.ajax(
    {
        url: "calc_php/get_results.php", 
        success: function(result)
        {
            $("#texty").html(result);
        }
    });
}

然后是一些php包含文件,例如:

<?php
    include '../../database.php';
    $pdo = Database::connect();
    $sql = 'SELECT * FROM country ORDER BY country_id;';
    foreach ($pdo->query($sql) as $row) {
        echo '<option value="'.$row['country_id'].'">'.$row['descrp'].'</option>';
    }
    Database::disconnect();
?>

我知道对于这么小的应用程序,oop 可能不是必需的,但是有兴趣学习,谁能建议我在这方面使用 oop 的方向?我唯一模糊的一点是数据库连接类:

<?php
class Database
{
    private static $dbName = 'web_app' ;
    private static $dbHost = 'localhost' ;
    private static $dbUsername = 'root';
    private static $dbUserPassword = '**NotThatStupid**';

    private static $cont  = null;

    public function __construct() {
        die('Init function is not allowed');
    }

    public static function connect()
    {
       // One connection through whole application
       if ( null == self::$cont )
       {     
        try
        {
          self::$cont =  new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword); 
        }
        catch(PDOException $e)
        {
          die($e->getMessage()); 
        }
       }
       return self::$cont;
    }

    public static function disconnect()
    {
        self::$cont = null;
    }
}
?>

我们将不胜感激地收到任何建议或指点! :)

【问题讨论】:

标签: javascript php ajax oop web


【解决方案1】:

您的 php Database 类更像是一个实用程序类。

在考虑 OOP 原则时,将数据视为对象,并设计它们的属性和方法。

例如,在你的表格行检索

    foreach ($pdo->query($sql) as $row) {
      echo '<option value="'.$row['country_id'].'">'.$row['descrp'].'</option>';
    }

它可以帮助定义每一行的类

<?php
class Country
{
    public $country_id;
    public $description;

    public function __construct($props) {
      $this->country_id = $props['country_id'];
      $this->description = $props['description'];
    }

    public function renderOption()
    {
      return '<option value="'.$this->country_id.'">'.$this->country_id.'</option>';
    }

}
?>

然后当你需要渲染它时

foreach ($pdo->query($sql) as $row) {
    $country = new Country($row);
    echo $country->render();
}

希望这可以让您开始思考 OOP。 随着您变得更加舒适,由于您正在使用从数据库派生的数据创建对象,因此您将希望研究使用 ORM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多