相关疑难解决方法(0)

使用PDO :: FETCH_CLASS和Magic方法

我有一个使用魔术方法来存储属性的类.这是一个简化的例子:

class Foo {
    protected $props;

    public function __construct(array $props = array()) {
        $this->props = $props;
    }

    public function __get($prop) {
        return $this->props[$prop];
    }

    public function __set($prop, $val) {
        $this->props[$prop] = $val;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试为PDOStatement它的每个数据库行实例化此类的对象,就像这样(不起作用):

$st->setFetchMode(PDO::FETCH_CLASS, 'Foo');

foreach ($st as $row) {
    var_dump($row);
}
Run Code Online (Sandbox Code Playgroud)

问题是,在设置属性值时,我的类PDO::FETCH_CLASS似乎没有触发魔术__set()方法.

如何使用PDO实现所需效果?

php pdo magic-methods

9
推荐指数
1
解决办法
6289
查看次数

使用魔术方法的OOP PHP,getter和setter

有哪些策略可用于为PHP类的私有成员创建访问器和更改器?这个建议是否合适:http://cormacscode.wordpress.com/2009/01/22/read-only-object-variables-in-php-using-magic-methods/

<?php
class classWithReadOnlyVar
{
    private $readOnlyVar;

    public function __get($varName)
    {
        return $this->$varName;
    }

    public function __set($varName,$varValue)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果某些成员需要私有,公共或受保护的财产方法怎么办?

php oop

5
推荐指数
1
解决办法
6997
查看次数

PDO :: FETCH_CLASS没有将类名作为参数传递

我遇到了一段代码,其中PDO::FETCH_CLASS没有将类的名称作为参数传递,而是这样:

  function getUsers() {
    $DBH = $this->getDbh();
    $query = "SELECT * FROM users";

    try {
      $STH = $DBH->query($query);
      $users = $STH->fetchAll(PDO::FETCH_CLASS);
    } catch(PDOException $e) {

    }

    return $users;
  }
Run Code Online (Sandbox Code Playgroud)

现在,在官方文件中 它说:

如果fetch_style包含PDO :: FETCH_CLASSTYPE(例如PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE),则类的名称由第一列的值确定.

所以我不确定我究竟是什么意思,也不知道它是如何运作的.假设我有users一张记录表

  • ID:1
  • 名称:乔什
  • 等......

那怎么能PDO::FETCH_CLASS知道什么是班级名字?我可以用类名添加列到我的记录中,FETCH_CLASS从数据库中获取类名吗?记录结构的例子将受到高度赞赏...... thx

*我正在测试这个类而不是作者,所以更改类是无关紧要的

php mysql pdo

3
推荐指数
1
解决办法
293
查看次数

标签 统计

php ×3

pdo ×2

magic-methods ×1

mysql ×1

oop ×1