PHP面向对象靠实践而非死记语法,需通过写错、调试构造函数、理解$this指向来形成直觉;类必须规范命名、正确加载、合理初始化,构造函数是初始化核心入口,$this和->操作符的使用须严格遵循作用域与规则。

PHP面向对象不是靠背语法学会的,而是靠写错几次、改通构造函数、搞懂 $this 指谁之后自然形成的直觉。类写得再标准,不实例化、不调用、不传参、不处理属性初始化,就只是个空壳。
class 定义类时必须带大驼峰命名和花括号体
类名不是随便起的字符串,它要能被自动加载器识别、被 IDE 补全、被其他开发者一眼看懂职责。比如 User 可以,user 或 user_class 就容易出问题——前者在 PSR-4 自动加载下找不到文件,后者不符合约定导致协作混乱。
- 必须用
class关键字开头,后面紧跟类名,中间不能有空格或换行 - 类体必须用
{}包裹,哪怕里面只有一行public function __construct() {} - 类中至少得有一个方法(哪怕是空的),否则它无法体现“行为封装”,只算数据容器,偏离 OOP 本意
- 属性不建议直接赋默认值(如
public $name = '';),而应在__construct()中初始化,避免意外继承或序列化时状态污染
new 创建对象前必须确保类已加载且构造函数参数匹配
报错 Fatal error: Uncaught Error: Class 'User' not found 不是语法错,是路径或自动加载没配好;而 Warning: Missing argument 1 for User::__construct() 是参数传少了——这两类错误最常卡住新手,但原因完全不同。
- 用
new User()前,确认该类文件已被require、include或 Composer 自动加载机制载入 - 如果类定义了
__construct($name, $email),就必须传两个参数:new User('张三', 'zhang@example.com'),少一个就报 Warning 或 Fatal(取决于 PHP 版本和严格模式) - 构造函数里别直接 echo 或 exit,否则对象创建失败还不好调试;优先做属性赋值,逻辑后置
- 对象变量(如
$u)只是引用,不是副本;多个变量指向同一对象时,修改$u->name会影响所有引用
访问属性和方法必须用 -> 操作符,且注意 $this 的作用域
$this 不是全局变量,也不是魔法常量,它是 PHP 在运行时自动注入到每个非静态方法中的当前对象引用。漏写、错写成 $this-> 后跟不存在的属性,或者在静态方法里误用,都会立刻报 Notice 或 Fatal。
立即学习“PHP免费学习笔记(深入)”;
- 在类内部访问自身属性/方法:必须写
$this->name、$this->greet();写成$name或greet()是错的,会访问局部变量或报未定义函数 - 在类外部访问 public 成员:用对象变量加
->,如$u->name = '李四'; $u->greet();;->左边必须是对象实例,不能是类名 - private/protected 属性无法从外部直接读写,强行访问会静默失败(private)或报 Fatal(protected 跨类时);这不是 bug,是封装生效
- 不要在构造函数里调用尚未定义的方法,PHP 解析顺序可能导致
Undefined method
构造函数 __construct() 不是可选项,而是初始化事实上的入口
很多教程说“可以不写构造函数”,这话没错,但实际项目里几乎没人真这么干。跳过 __construct() 意味着你把初始化逻辑散落在各处,后续加校验、日志、依赖注入时就得重写一堆代码。
- 构造函数是对象生命周期第一站,适合做:参数校验、依赖注入(如传入 DB 连接)、默认状态设定、资源申请
- 不要在
__construct()里做耗时操作(如远程 API 请求),否则 new 一个对象就卡住;异步或懒加载更稳妥 - 如果父类有构造函数且子类也定义了
__construct(),记得手动调用parent::__construct(...),否则父类初始化逻辑丢失 - PHP 8.2+ 支持构造函数属性提升(constructor property promotion),可简化写法:
public function __construct(public string $name, private int $age) {},但需确认运行环境支持
真正卡人的从来不是 class 怎么写,而是 $this 指谁、new 为什么失败、-> 为什么报错、__construct() 里该放什么不该放什么——这些细节没在真实报错里撞过几次,光看教程永远似懂非懂。



















