gpt4 book ai didi

PHP OOP/MVC 方法

转载 作者:行者123 更新时间:2023-12-04 05:59:23 24 4
gpt4 key购买 nike

这不是真正的问题,而是更多的问题。
我的问题是它是如何“应该被”编程的。
不过,解释起来可能不太清楚。

所以我的问题是;我是否必须使用多种方法从数据库中检索数据?
例如,我有一个名为 FRUITS 的表。
它包含添加水果的 ID、名称和日期。
现在我想根据给定的 ID 获取水果的名称,稍后在脚本中我也想获取水果的日期。

我应该创建一个方法,例如 get_fruit($id) 返回名称和日期,还是两个单独的方法 get_name($id) 和 get_date($id)?

提前致谢。

最佳答案

您应该使用一个包含所有必需数据的对象。例如:

class Fruit {

protected ... variables;

public function getId() {...}
public function getDate() {...}
...

}

也在实现 __set__get将是使用完整 php 潜力的好例子。

您也可以实现 save()方法(或扩展数据库行类,例如 Zend_Db_Table_Row

所以整个代码看起来像:

$fruit = $model->getFruid( 7); // $id = 7 :)
echo $fruit->id; // would call internally $fruit->__get( 'id')
echo $fruit->date;

// And modification:
$fruit->data = '2011-08-07';
$fruit->save();

编辑:当您需要加载大量数据(例如长文本)时,使用单独的方法加载某些数据很有用(仅?)

编辑 2: (回答评论): __get__set当您尝试访问对象的未定义属性时调用,例如:

class Foo {
public $bar;
public function __get( $name){
echo $name "\n";
return 'This value was loaded';
}
}

// Try to use
Foo $foo;
echo $foo->bar . "\n";
echo $foo->foo . "\n";

我知道有两种“大”方法可以解决这个问题:

// First use __get and __set to access internal array containing data
class DbObject {
protected $data = array();

public function __get( $propertyName){
// Cannot use isset because of null values
if( !array_key_exits( $propertyName,$this->data)){
throw new Exception( 'Undefined key....');
}

return $this->data[ $propertyName];
}

// Don't forget to implement __set, __isset
}

// Second try to call getters and setter, such as:
class DbObject {
public function getId() {
return $this->id;
}

public function __get( $propertyName){
$methodName = 'get' . ucfirst( $propertyName);
if( !method_exits( array( $this, $methodName)){
throw new Exception( 'Undefined key....');
}
return $this->$methodName();
}
}

总而言之......第一种方法很容易实现,是完全自动化的......你不需要大量的代码,每个类的源代码几乎相同。第二种方法需要更多的编码,但可以为您提供更好的控制。例如:

public function setDate( $date){
$this->date = date( 'Y-m-d h:i:s', strtotime( $date));
}

但另一方面,您可以使用第一种方法来做到这一点:

class Fruit extends DbObject {
public function __set( $key, $val){
switch( $key){
case 'date':
return $this->setDate( $val);

default:
return parent::__set( $key, $val);
}
}
}

或者您可以使用总组合并首先检查getter/setter,然后尝试直接访问属性...

关于PHP OOP/MVC 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com