php - PDO:fetchClass未设置父类的属性

标签 php mysql pdo

所以我有三个类(class):

class GenericObject{
    private $parentThing
}

class MiddleObject extends GenericObject{
     private $middleThing
}

class ChildObject extends MiddleObject{
     private $childThing;    
}

当我调用 pdoDatabaseThing->fetchAll(PDO::FETCH_CLASS, "ChildObject");, 尽管 ChildObject 和 GenericObject 中定义的属性按预期设置,但 MiddleObject 中定义的所有属性均为 null。

这是预期的行为,还是我只是在代码中遗漏了某个错误?有已知的解决方法吗?

最佳答案

看起来这是一个预期的行为。 ChildObject不知道父类的私有(private)字段,因为它们在该类中是私有(private)的,这就是重点。当父字段至少为 protected 时您可以设置该字段,因为 ChildObject类可以按预期使用它们。

<?php
class ParentClass {
    protected $bar;

    public function getBar() {
        return $this->bar;
    }
}
class ChildClass extends ParentClass {
    private $foo;

    public function getFoo() {
        return $this->foo;
    }
}

$dbh = new PDO('mysql:host=localhost', 'test');
$stmt = $dbh->query('SELECT "someValue" AS foo, "another value" as bar');
$all = $stmt->fetchAll(PDO::FETCH_CLASS, 'ChildClass');
$obj = $all[0];
var_dump($obj);
var_dump($obj->getFoo(), $obj->getBar());

这将生成以下输出:

object(ChildClass)#3 (2) {
  ["foo":"ChildClass":private]=>
  string(9) "someValue"
  ["bar":protected]=>
  string(13) "another value"
}
string(9) "someValue"
string(13) "another value"

如果将parents字段的可见性更改为private你会得到你已经观察到的情况, parent 的私有(private)领域仍然在 NULL :

object(ChildClass)#3 (3) {
  ["foo":"ChildClass":private]=>
  string(9) "someValue"
  ["bar":"ParentClass":private]=>
  NULL
  ["bar"]=>
  string(13) "another value"
}
string(9) "someValue"
NULL

关于php - PDO:fetchClass未设置父类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32234441/

相关文章:

php - PayPal IPN 已验证握手但 IPN 无效

php - 从 PHP 写入图像文件时出错

php - 如何更改 PHP 中的 NLS_DATE_FORMAT

php - MySQL WHERE 查询不起作用

java - 我在本地 MySQL 服务器上的主机名是什么?

c# - 从连接到远程 MySQL 数据库的 PHP 服务检索/获取数据以显示到我的 ASP.Net Web 应用程序

mysql - 禁用查询缓存的影响?

php - 从 sqlite pdo 获取数组与 php 连接查询

php - 我想将数据插入我的数据库,但它不起作用

php - 为什么此查询不显示任何信息?