首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新创建为对象和类PHP

重新创建为对象和类PHP
EN

Stack Overflow用户
提问于 2014-11-23 18:16:09
回答 5查看 88关注 0票数 1

我有点困惑。我从未在PHP中过多地使用对象和类,但有人建议我重新使用它编写一些代码。

我要做的是使$auctions成为一个对象属性,同时将所有行数据保存到它。

现在,我做echo $auctions[1]['title'];来响应id=1标题的列表。我希望重新创造它,这样它就会成为一个对象。

这是我目前的密码,

代码语言:javascript
复制
$sqlquery = "SELECT * FROM auctions";
if ($result = $db->query($sqlquery)) {
    while ($row = $result->fetch_assoc()) {
        $auctions[$row['id']]['id'] = $row['id'];
        $auctions[$row['id']]['title'] = $row['title'];
        $auctions[$row['id']]['featured_image'] = $row['featured_image'];
        $auctions[$row['id']]['description'] = $row['description'];
        $auctions[$row['id']]['date'] = $row['date'];
        $auctions[$row['id']]['location'] = $row['location'];
        $auctions[$row['id']]['highlights'] = $row['highlights'];
        $auctions[$row['id']]['catagories'] = $row['catagories'];
        $auctions[$row['id']]['notes'] = $row['notes'];
        $auctions[$row['id']]['terms'] = $row['terms'];
        $auctions[$row['id']]['contact'] = $row['contact'];
    }
}

我不知道如何做到这一点,但如果有人能给我一点提示,指点我的方向,我会非常感激的!)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-23 19:45:34

现在,我将在这里编写一个最小的片段:

首先,让我们为所有模型创建一个基类:

代码语言:javascript
复制
abstract class Model() {
  public $fields = array();
  private $data = array();
  public function setValues(array $vals) {
    foreach($vals as $key=>$value) {
      if (in_array($key, static::$fields)) {
        $this->data[$key] = $value;
      }
    }
  }
  public function get($key) {
      if (in_array($key, static::$fields) && isset($this->data[$key])) {
        return $this->data[$key];
      }
      return null; // or throw Exception)
  }
}

接下来,创建一些具体的模型:

代码语言:javascript
复制
class Users extends Model {
  public static $fields = array('id', 'name');
}

我们现在可以用它:

代码语言:javascript
复制
$users = array();
$sqlquery = "SELECT * FROM Users";
if ($result = $db->query($sqlquery)) {
    while ($row = $result->fetch_assoc()) {
      $user = new User();
      $user->setValues($row);
      $users[] = $user;
    }
}

您可以直接向用户模型中添加一些特定于用户的方法(也称为登录)。

此外,您还应该实现其他模型方法,如getByIdgetByQuerysave和其他方法,并且不使用直接的sql查询,因为模型本身可以做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2014-11-23 18:23:35

使用上面列出的所有需要的成员变量(例如,auctionstitlefeature_image等)创建一个类title。接下来,在类中创建一个可以接受setValues()的setter方法(例如$row )。

代码语言:javascript
复制
$sqlquery = "SELECT * FROM auctions";
$auction = new Auctions();
if ($result = $db->query($sqlquery)) {
    while ($row = $result->fetch_assoc()) {

       $auction->setValues( $row );
       // do something with $auction...
    }
}

您也可以使用神奇的方法__set(),而不是显式的setter方法。

票数 2
EN

Stack Overflow用户

发布于 2014-11-23 18:23:17

可以将值存储在以下对象中

代码语言:javascript
复制
$obj = new stdClass; //create new standard class object

$obj->id = $row['id']; //assign property value
$obj->title = $row['title'];
//further properties

..。诸若此类

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27092520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档