请看看这个课程,我知道应用程序之外的一段代码几乎没有说明应该做什么,但我认为你理解基本上应该做什么以及用于什么。< / 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
答案 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,它们是静态的,因为它们不属于特定对象,它们是返回填充对象的加载器。
无论如何,这并不意味着它是最好的方法,但它是我多年来一直使用的方法,它已被证明可以创建非常好的和可管理的代码。