如何在OO PHP中编码?

时间:2010-02-02 13:34:47

标签: php mysql database oop forms

我如何在OO PHP中执行此操作:

  1. 表格('in newstudent.php')要求用户输入他的姓名,课程和年份。
  2. 选择“提交”按钮后,页面将转到“records.php” records.php - 包含一个显示所有记录的表(列:名称,课程,年份)
  3. 当用户选择“提交”时,新记录将被添加到具有名为STUDENTS的表的数据库中
  4. SQL代码

    CREATE TABLE STUDENTS(
       NAME VARCHAR(25) NOT NULL,
       COURSE VARCHAR(25) NOT NULL,
       YEAR INT NOT NULL,
    CONSTRAINT STUDENTS_PK PRIMARY KEY(NAME));
    

    *请不要介意主键,因为我知道使用name作为主键是不准确的。这只是为了简单的目的。

    还有......我如何使用OO PHP操作数据库中的数据? 感谢

3 个答案:

答案 0 :(得分:5)

  1. 读一本书
  2. 搜索Google
  3. 创建学生对象
  4. 创建数据库对象
  5. 查询数据库对象以插入学生对象

答案 1 :(得分:1)

好吧,如果你想切换到在数据库中代表学生的OO方法,那么看起来像下面定义的'Student'类怎么样(虽然这是非常基本的,而不是任何方式的完整ORM )。它需要你到ActiveRecord风格的一半。

请注意,我假设您将使用整数id列,而不是这样会使整个类烦恼。

class Student {

   var $id = -1;
   var $name;
   var $course;
   var $year; 

   public static function newFromID ($id) 
   {
     //fetch a row ($row) from the students table matching the given id
     //perhaps returning false if the student doesn't exist?
     return self::newFromRow($row);
   }

   // this method should return a new student object given a specific db row
   // and should be called from newFromID.  This function means that if the table
   // changes, modifications only have to be made in one place
   public static function newFromRow($row) 
   {
     $obj = new Student();

     //fill in the fields of the object based on the content of the row

     return $obj;
   }

   public static function getAllStudents()
   {
     //perhaps return an array of student objects, by doing a broad select,
     //and passing each row to newFromRow?
   }

   //this should save the object to the database, either inserting or updating as appropriate
   public function save()
   {
     if($this->id == -1) 
     {
        //insert, store the auto_increment id in $this->id
     } else {
        //update
     }

   }

}

因此,要创建一个新学生,并将其保存到数据库:

$student = new Student();

$student->name = "John Smith";
$student->course = "French";
$student->year = 2;

$student->save();

实际上,使用现有的ORM系统通常更为明智,但如果这不是一个选项,您可以考虑编写自己的ORM系统。

答案 2 :(得分:0)

也许您谈论ORM - 对象关系映射模式?有许多不同的方法可以将映射的SQL数据对象传递给PHP类:Propel,Doctrine(两者都可以与Symfony框架一起使用),ActiveRecord。

当然,您可以尝试实现自己的ORM系统。您需要为此ORM编写数据访问层,这些类描述SQL表和许多其他内容。这非常有趣(出于教育目的)。