PHP - 从DB加载/删除是否使用静态方法?

时间:2012-01-17 19:36:31

标签: php database static load

请看看这个课程,我知道应用程序之外的一段代码几乎没有说明应该做什么,但我认为你理解基本上应该做什么以及用于什么。< / p>

<?php

class Customer
{
   const DB_TABLE = 'customers';

   public $id = NULL;
   //all other properties here

   function __construct($associative_array = NULL)
   { 
      //fills object properties using values provided by associative array
   }

   static function load($customer_id)
   {
      $obj = new static(); //PHP 5.3 we use static just in case someone in future wants to overide this in an inherited class

      //here we would load data from DB_TABLE and fill the $obj

      return $obj;
   }

   static function delete($customer_id)
   {
      //here we just delete the row in the DB_TABLE based on $customer_id (which is the primary key of the table)
   }

   function save()
   {
      //saves $this properties into a row of DB_TABLE by either updating existing or inserting new one
   }
}

除了你对代码做出的任何类型的评论(总是被赞赏),这里的主要问题是:“已经阅读了很多关于static方法有多糟糕的内容,一般情况下使用static,在这段代码中你会使两个方法load/delete不是静态的吗?如果是,为什么,你可以用一个小例子来解释。“

我觉得不要让它们static似乎很奇怪因为我认为创建一个从DB加载的新对象是很奇怪的,每次都被强制写入:

$obj = new Customer(); //creating empty object
$obj->load(67); //loading customer with id = 67

而不是简单地做

$obj = Customer::load(67); //creates a new customer and loads data form DB

1 个答案:

答案 0 :(得分:2)

这完全取决于您希望代码如何构造。只要你正确使用它们,IMO静态函数就不错了。

例如,我的所有模型功能都相似,并遵循以下结构:

class models_car {
    public static function getCar($id);
    public static function getCars();
    public static function getCarsByDriver(models_driver $driver);
    public function save();
    public function delete();
    public function isNew();
    public function getProperty1();
    public function getProperty2();
    public function getProperty3();
    public function setProperty1($value);
    public function setProperty2($value);
    public function setProperty3($value);
}

所以在这里,你可以使用模型作为特定条目的表示,如果你调用delete或save,它将在对象本身的上下文中调用。如果你调用getCar,getCars或getCarsByDriver,它们是静态的,因为它们不属于特定对象,它们是返回填充对象的加载器。

无论如何,这并不意味着它是最好的方法,但它是我多年来一直使用的方法,它已被证明可以创建非常好的和可管理的代码。