PHP PDO: выполняются ли стили Fetch_CLASS и FETCH_INTO в свойствах частных объектов?

Довольно короткий вопрос, вот пример:

$prepared = $this->pdo->prepare("SELECT * FROM Users WHERE ID = :ID"); $statement = $prepared->execute(array(":ID" => $User_ID)) $result = $statement->fetchAll(PDO::FETCH_CLASS, "User"); //OR $User = new User(); $result = $statement->fetch(PDO::FETCH_INTO, $User); 

(написанный сверху, может содержать синтаксические ошибки)

Влияют ли эти два на частные свойства указанных объектов? Я читаю, что он также обходит функцию __construct , так же как и обойти частный статус?

Очень короткий ответ: Да, так и будет.

 class Foo { private $id; public function echoID() { echo $this->id; } } $result = $statement->fetchAll(PDO::FETCH_CLASS, "Foo"); $result[0]->echoID(); // your ID 

В стороне:

Это приведет к синтаксическим ошибкам $statement->fetchAll(PDO::FETCH_INTO, $User); , Вы не можете использовать FETCH_INTO с методом fetchAll .

Но событие с PDO :: FETCH_CLASS возникает проблема для частных свойств для подклассов. Например

 class Animal { private $color; public function getColor() { return $this->color; } } class Cat extends Animal { } $statement->setFetchMode(PDO::FETCH_CLASS, "Cat" ); $someCat = $statement->fetch(); echo $someCat->getColor(); //empty print_r( $someCat ); /* now have strange output like: [color:Animal:private] => [color] => grey */ 

Но если вы установите свойство для защиты – оно отлично работает

Причина, по которой вы не можете получить доступ к приватным свойствам суперкласса, заключается в том, что эти свойства недоступны. Подклассы не принимают частные атрибуты своих родительских классов, включая переменные и функции.

edit: Спасибо за разъяснение вашего вопроса, но это делает мой ответ немного смешным здесь. :п

Вы можете попробовать:

 class Foo { private $id; public function __set($prop, $val) { $this->$prop = $val; } public function __get($prop) { return $this->$prop; } } $result = $statement->fetchAll(PDO::FETCH_CLASS, "Foo"); $result[0]->id();