php - 如何将 PDO::FETCH_CLASS 与命名空间一起使用?
问题描述
我正在学习 PHP,现在我正在展示一些带有 PDO 的文章。我在使用命名空间的 PDO::FETCH_CLASS 时遇到了一些问题。
我的文件夹架构:
class/
- Post.php
layout/
-articles/
--articles.php
public/
-index.php (contains my router)
Post.php
namespace App\Articles;
class Post {
private $id;
private $name;
private $content;
private $date;
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function getContent()
{
return $this->content;
}
public function getExcerpt()
{
$res = $this->content;
return (strlen($res) > 150) ? substr($res, 0, 150) . '...' : $res;
}
public function getDate()
{
return $this->date = date('d-m-Y', $this->date);
}
}
data.db 仅包含四列:id、name(text)、content(text)、created_at(int)
我遇到问题的部分:
use App\Articles\Post;
$pdo = new PDO('sqlite:../data.db', null, null, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
]);
try {
$query = $pdo->query('SELECT * FROM posts');
$posts = $query->fetchAll(PDO::FETCH_CLASS, 'Post');
} catch (PDOException $e) {
$error = $e->getMessage();
}
我尝试了不同的打字而不是'Post
喜欢
'App\Articles\'
'App\Articles\Post'
'App\Articles\::POST'
...
我无法让它与 namepsace 一起使用。它与require '../class/Post.php'
.
这个问题有解决方案还是我应该只使用 require ?
解决方案
PDO 不查找别名类名或解析当前命名空间。所以你必须明确地传递它:
$query = $pdo->prepare('SELECT * FROM posts');
$query->execute();
$posts = $query->fetchAll(PDO::FETCH_CLASS, __NAMESPACE__ . '\\post');
使用查询而不是prepare会导致pdo错误,我改为prepare。
如果它与类分开,则不能使用 NAMESPACE ,但可以使用 full path 'app\controller\post'
。
推荐阅读
- java - 使用 Java 将文件从一个 AWS S3 存储桶复制到另一个 S3 存储桶
- javascript - VS Code Node.js macOS 调试不起作用 - 我什至不知道如何说明问题
- python - .bin 文件的 Python Big-Endian 转换
- c# - 子类看不到父方法
- javascript - 按 ID 获取元素不起作用 | JavaScript
- javascript - 这是使用 requestAnimationFrame 的正确方法吗?
- reactjs - Snackbar 在清除前显示空消息
- python - 在python中使用round函数
- python - 为什么我的 while 不使用两个条件循环仅使用第一个条件而忽略第二个条件?
- python - 如何使用参数扩展 docker 容器