
psr-2和psr-12均未对`$this`关键字后是否添加空格作出规定,`$this->name`与`$this -> name`在语法和规范层面均合法,但前者是社区广泛采纳、可读性更优的推荐写法。
在PHP面向对象编程中,$this用于引用当前实例,其后紧跟对象操作符->访问属性或方法。关于$this与->之间是否应插入空格,PSR-2(已废弃)和现行通用标准PSR-12均未作任何明确规定。这意味着两种写法在技术上都是合规的:
return $this->name; // ✅ 合规,且为事实标准 return $this -> name; // ✅ 合规,但不推荐
尽管允许,但需明确:PSR不禁止 ≠ 推荐使用。PSR-12的核心原则之一是提升代码的可读性与一致性,而$this -> name这种在操作符两侧强行插入空格的方式,会割裂$this->作为一个逻辑单元的视觉连贯性,降低扫描效率,尤其在复杂表达式或链式调用中更易引发歧义。
值得注意的是,PSR-12确实在「Method Chaining」(方法链式调用)部分允许在->前保留换行与缩进,以提升多行链式调用的可读性,例如:
$result = $query
->select('id, name')
->from('users')
->where('status = ?')
->execute();此处的换行与缩进服务于结构清晰性,而非在单行内插入冗余空格。因此,$this->method()中的->应视为紧贴左侧变量和右侧标识符的不可分割的操作符,如同算术运算符+、==一样——我们不会写$a + $b为$a + $b(多空格),同理也不应将$this->name拆解为$this -> name。
立即学习“PHP免费学习笔记(深入)”;
✅ 最佳实践总结:
- 始终采用无空格风格:$this->property 和 $this->method()
- 避免在单行内为->人为添加空格,除非使用自动格式化工具(如PHP-CS-Fixer)明确配置了特殊规则(但主流配置如psr12默认禁用该风格)
- 团队项目中应通过.php-cs-fixer.php或phpcs.xml统一约束,推荐启用object_operator_without_space规则(PHP-CS-Fixer内置)
简言之:PSR留白,社区定调;规范允许多样性,但专业性要求一致性与可读性——$this->,就该连在一起。










