让我们从FFF用户指南中给出的一个示例开始。有一个数据库表:
CREATE TABLE products (
productID VARCHAR(30),
description VARCHAR(255),
supplierID VARCHAR(30),
unitprice DECIMAL(10,2),
quantity INT,
PRIMARY KEY(productID)
);
我有一个虚拟字段的数据映射器:
$item=new DB'SQL'Mapper($db,'products');
$item->totalprice='unitprice*quantity';
假设我已经执行了一些查询,并且我使用了这个虚拟字段。
现在我想删除这个虚拟字段,因为我不需要它来处理进一步的请求,我不想用无用的计算使数据库过载。这可能吗?
要求是从一个'对象实例'中删除一个'属性'。
在大多数PHP '框架','orm'等中实现'模型'的'标准方式'是实现它们,以便可以使用'数组语法'访问它们。
另一种方法是实现一些magic methods
,如__unset。
。当您调用unset($item->property);
时,代码将运行以正确维护它。
要真正灵活,那么在'基本模型'中实现这两种方法
这是FFF
所做的
请参阅:classes: lib/magic.php
和lib/base.php
了解如何完成的所有血腥细节。
取自magic.php的源代码…
/**
* Alias for offsetunset()
* @return NULL
* @param $key string
**/
function __unset($key) {
$this->offsetunset($key);
}
/**
* Convenience method for removing property value
* @return NULL
* @param $key string
**/
function offsetunset($key) {
if (Base::instance()->visible($this,$key))
unset($this->$key);
else
$this->clear($key);
}