Как работает PDO в этой ситуации? Что я сделал не так? Я предположил, что переменная $ full имела бы выход «John Smith», потому что экземпляр класса является $ user в обеих ситуациях.Невозможно заполнить свойства объекта с помощью PDO :: FETCH_CLASS
Я попытался отладить эту часть программы, я поставил наблюдателя на $ first_name. Когда отладчик входит в сферу действия класса, я вижу вывод «Джон».
Что я должен добавить/изменить этот код, чтобы получить выход "John Smith"?
// user.php file
class User
{
...
private $first_name;
private $last_name;
public function findById($id = 0)
{
$sql = "SELECT * FROM " . $this->table . " WHERE id = :id";
$params = [":id" => $id];
$class = get_called_class();
$result = $this->findBySql($sql, $params);
return $this->db->fetchObject($result, $class);
}
public function findBySql($sql, $params = [])
{
return $this->db->query($sql, $params);
}
public function fullName()
{
return $this->first_name . " " . $this->last_name;
}
}
// database.php file
class DataBase
{
...
public function fetchObject($stmt, $className = "stdClass")
{
$result = $stmt->fetchAll(PDO::FETCH_CLASS, $className);
return $result[0];
}
}
// index.php
$user = new User();
$found = $user->findById(1);
$full = $user->fullName();
var_dump($full); // output: string ' ' (length=1) -----> supposed: "John Smith"
var_dump($found); /* output: object(User)[5]
....
private 'first_name' => string 'John' (length=4)
private 'last_name' => string 'Smith' (length=5)
....
*/
Это решение не работает, но я понял, что означал! – Killuminati
Я изменил неправильную функцию. Попробуйте это решение. – Barmar
Это решение работает тоже ... Я полагаю, что всякая магия в PDO API, потому что я не могу понять логику кода. – Killuminati