0

我正在拼命地朝着 OOP 方向发展,但我不知道什么时候使用它。我得到了机制,但何时使用它们只是不点击。我很好奇我目前的情况是否适合 OOP 方法。

我有 3 页。Details.php 显示两个并排的 div。一个用户可以添加注释,另一个可以查看存储在 MySQL 中的以前的注释。他们可以通过 Details.php 中的 AJAX 功能添加注释和提取注释。javascript 函数调用 add_notes.php 向数据库添加注释,并调用 load_notes.php 通过 Jquery .load() 在页面上加载注释以及提交新注释以刷新 div 时。

我是一个新手,但我觉得有更好的方法来组织这段代码。我会研究一个框架,但我已经深入到这个项目中,所以正在寻找关于如何更好地分解它的 OOP 想法或验证我正在以尽可能简化的方式进行操作。所有评论都有帮助!

详情.PHP

<script type="text/javascript">
$(document).ready(function(){
//When loading page load notes/messages tables and then reload when ajax is done        
$('#note_holder').load('load_notes.php?subcat=<? echo $subcat;?>'); 
    //onclick handler send message btn
    $("#notes_submit").click(function(){
        $(this).closest('form').submit(function(){
            return false;
        });
        var frm = $(this).closest('form');              
        var data = $(frm).serialize();
             if($(frm).valid()){                                
                    $.post( 
                            "../php/add_notes_ajax.php", 
                            data, 
                            function(data){                             
                                $('#note_holder').load('load_notes.php?subcat=<? echo $subcat;?>');
                            } 
                    );
             }
    });           
});
</script>  

<div style="float:left; margin-left:15px;">
    <form  name="messages1" class="form" id="myforma" method="post" action="#" enctype="multipart/form-data">
        <fieldset style="width:500px; height:400px; overflow:auto; font-size:11px;">
            <legend>Click to View Previous Notes / Messages</legend>            
            <div style="height:350px; overflow:auto;" class="note_holder" id="note_holder">
             <!--This div is being called from the ajax script to load add_notes_ajax.php-->              
            </div>           
        </fieldset>
        <div style="margin-top:20px;"></div>
    </form>    
</div>

<div style=" float:right;">
  <form  name="notes" class="notes" id="notes" method="post" action="#" enctype="multipart/form-data">
    <fieldset style="width:300px; height:400px;">
      <legend>Enter a Note</legend>
      <div style="margin-top:00px;"></div>
      <div>
     <textarea rows="20" cols="20" style="height:300px; width:290px;" name="notes"></textarea>
     <input type="submit" name="notes_submit" id="notes_submit" value="Submit Note" class="button"  />
     <input type="hidden" name="subcat" value= "<?php echo $subcat; ?>" />
      </div>
    </fieldset>
    <div style="margin-top:20px;"></div>
  </form>
</div>

添加注释 AJAX.PHP

<?php
include_once('../bootstrap.php');
include_once('../site_globals/common_functions.php');
include_once('../site_globals/common_queries.php');
include_once('../php/gump.class.php');
page_protect();
error_reporting(0); 

$firstname = filter($_SESSION['user_name']);
$myid      = filter($_SESSION['user_id']);

// All the variables from the submission form 
$notes     = filter($_POST['notes']);
$subcat    = filter($_POST['subcat']);

//Insert Notes into the database

    $stmt = $dbh->prepare('
        INSERT INTO `notes` 
            (date  , sub_cat_id , notes) 
        VALUES 
            (:date , :subcat    , :notes )
            ');
    $stmt->bindValue('subcat',    $subcat);
    $stmt->bindValue('date',    date('Y-m-d H:i:s'));
    $stmt->bindValue('notes',    $notes);
    $stmt->execute();       

echo "This note was added successfully";
exit;

?>

. 加载注释.PHP

<table width="100%">
  <thead style="text-align:left; ">
    <tr style="font-size:14px; font-weight:bold;"> 
      <!-- <th><input class="check-all" type="checkbox" /></th>-->
      <th>Date</th>
      <th >Contents</th>
      <th>Preview / Print</th>
    </tr>
  </thead>
  <?php while ($messages_row = mysql_fetch_object($messages_res)):?>
  <tr>
    <td><a target="_blank" href="../site_hospital_files/thread.php?question_id=<?php echo $messages_row->question_id;?>"><?php echo substr($messages_row->reply, 0, 20) . '...';?></a></td>
    <td><?php echo date('Y-m-d', strtotime($messages_row->date_added));?></td>
    <td><a href="../site_hospital_files/pdf_messages_notes.php?msg_id=<?php echo $messages_row->question_id;?>&amp;var1=<?php echo $subcat;?>">Create PDF</a></td>
  </tr>
  <?php endwhile;?>
  <?php while($notes_row = $notes_res->fetch(PDO::FETCH_ASSOC)):?>
  <tr>
    <td><?php echo $notes_row[date]; ?></td>
    <td><?php echo substr($notes_row[notes], 0, 50).'...';?></td>
    <td><a href="pdf_messages_notes.php?note_id=<?php  echo $notes_row->sub_cat_id; ?>&var1=<?php echo $subcat;?>">View</a></td>
  </tr>
  <?php endwhile;?>
</table>
4

1 回答 1

3

绝对是。鉴于 MySQL 和其他关系数据库的关系性质,很容易定义 PHP 对象和 mysql 表的代码表示。考虑这个过于简单的类:

<?php
    class Note {
        private $id
        private $text;
        private $insert_dt;
        private $update_dt;
    }
?>

这允许您做的是更好地组织和重用功能,而无需重复代码或在代码库中搜寻。例如,假设我想开始以特定方式在所有页面上打印出每条笔记的插入日期。我该怎么做?我可能不得不更改网站上的每个页面。

如果我们正确定义了 setter 和 getter,这将成为一项非常简单的任务。我应该只需要在 1 个(非常明显的)位置替换格式化的返回字符串:

<?php
    class Note {
        // ...
        public function getFormattedInsertDate() {
            return date( "M, Y", $this->insert_dt );
        }
    }
?>

诚然,这一切在小范围内似乎都非常过度且耗时。我记得当我有丰富的 OO 经验时,我在大学里为自己建立了一个个人网站。当时我正在学习 PHP,对于这个网站,我倾向于使用内联代码来提高速度。它运行良好,非常快速且轻巧。我不理解网络框架上的喧嚣,因为它们感觉过于“沉重”。

这些问题是在维护过程中事后出现的。当您在 6 个月或几年后返回代码时,您会尝试找出此调用在哪里,或者为什么您必须在 8 个地方更改它以修复错误。这些是由于代码库中的不良耦合 - 内聚引起的感觉。

幸运的是,多年来涌现出许多框架,不仅支持而且鼓励和强制执行这种行为。如果您还没有,我强烈建议您研究 CakePHP 或 Code Igniter。它们都是非常容易精益的框架,可以很好地确定这些概念,并提供出色的介绍性教程来引导您创建博客网站。

我希望这有帮助。如果我遗漏了什么,请告诉我,我会根据需要进行更新。

于 2012-05-14T23:24:31.270 回答