You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO::FETCH_CLASS报类未找到但直接实例化类正常的问题求解

问题原因

PHP的use关键字属于编译时语法,仅对当前文件中直接书写的类名(比如new Product()这类语法)生效,不会解析运行时动态传入的字符串类名。
你在ProductsManager中传入给fetchAll的是字符串'Product',PDO会默认在当前ProductsManager所属的命名空间Tristan\TableauDynamique\Model下查找Product类,自然找不到对应类。而你直接new Product()时,编译阶段就会自动匹配use导入的完整类名,所以可以正常使用。

解决方法

直接使用类的::class常量传参即可,这个常量会自动返回带完整命名空间的类名字符串。
将你ProductsManager中的代码:

$products = $query->fetchAll(\PDO::FETCH_CLASS, 'Product');

修改为:

$products = $query->fetchAll(\PDO::FETCH_CLASS, Product::class);

额外注意

你当前Product类里的name、address、city属性定义的类型是int,从数据库字段含义来看这几个应该是字符串类型,后续fetch赋值时可能会出现类型转换错误,建议修改为string类型。

内容的提问来源于stack exchange,提问作者Tristan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:45:04