2012-02-03 65 views
3

我试图创建Setting对象调用__construct()方法与PHP PDO的新实例和约束PDO :: FETCH_PROPS_LATE。不幸的是我得到这个警告(和绑定不起作用)。使用PDO :: FETCH_PROPS_LATE和__construct()调用的PDO?

如何将列值传递给构造方法?

Warning: Missing argument 1 for Setting::__construct() in pdo.php.

Notice: Undefined variable: key in pdo.php.

class Setting 
{ 

    protected $key, $value, $displayable; 

    public function __construct($key, $value = null, $displayable = 1) 
    { 
     $this->key   = $key; 
     $this->value  = $value; 
     $this->displayable = $displayable > 0; 
    } 

} 

while($mashup = current($mashups)) 
{ 
    $stmt = $dbh->prepare('SELECT `key`, value, displayable 
     FROM setting WHERE mashup_id = :id'); 

    $stmt->bindParam(':id', $mashup->id, PDO::PARAM_INT); 
    $stmt->execute(); 

    $settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 
     'Setting'); 
} 

$stmt->closeCursor(); 

回答

8

你有一个非默认的参数$key在构造函数:

public function __construct($key, $value = null, $displayable = 1) 

所以,当你这样做是:

$settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,'Setting'); 

错误:warning: Missing argument 1 for Setting::__construct() in pdo.php抛出仅用于参数$key因为使用它不是默认的。

的正确使用fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,... 是这样的:

$variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 
          'classname', 
          <array of parameter names(in order) used in constructor>); 

所以,你的情况:

$variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 
          'Setting', 
          array('key', 'value', 'displayable'); 
+1

但再次调用__construct(),将其分配属性后(重写什么设置在constrcutor),对吗? – gremo 2012-02-04 20:36:28

+2

@格雷莫是的,绝对。 – ThinkingMonkey 2012-02-05 01:46:10

+0

我知道这是有点necro但是..它是否只是因为'PDO :: FETCH_PROPS_LATE'覆盖构造函数集的值,或将会发生? – BrassApparatus 2014-06-17 18:45:42