
psr-2和psr-12均未规定`$this`与对象操作符`->`之间是否允许或禁止空格,因此`$this->name`和`$this -> name`在语法和规范层面均合法;但前者符合社区惯例、可读性更优,应作为首选实践。
在PHP面向对象编程中,$this关键字用于引用当前实例,其后紧跟对象操作符->访问属性或方法。关于$this与->之间的空格问题,许多开发者曾疑惑是否违反PSR编码规范。答案很明确:PSR-2(已归档)与现行PSR-12《Extended Coding Style Guide》均未对此作出任何约束。
官方文档中既无“必须紧邻”的强制条款,也无“允许空格”的明文许可——这意味着该场景属于规范未覆盖的自由区(unspecified)。只要语法合法(PHP解析器接受),就不违背PSR。
例如,以下两种写法均完全合规:
// ✅ 符合PSR-12,且是社区绝对主流写法 return $this->name; return $this->getName(); // ✅ 语法正确,PSR未禁止,但非常规 return $this -> name; return $this -> getName();
值得注意的是,PSR-12虽未限制->两侧空格,却在方法链式调用(fluent interface) 场景下隐含了对垂直对齐空格的默许支持:
立即学习“PHP免费学习笔记(深入)”;
// ✅ PSR-12允许且鼓励的链式调用格式(缩进+换行,非水平空格)
$user->setName('Alice')
->setEmail('alice@example.com')
->activate();此处的换行与缩进提升了可读性,而->前后的水平空格(如$user -> setName())则完全不同——它破坏了操作符的视觉连贯性,增加认知负担,且无任何语义或维护价值。
✅ 最佳实践建议:
- 始终采用 $this->property 和 $this->method() 形式(零空格);
- 避免 $this -> property 或 $this -> method()(人为插入空格);
- 在多行链式调用中,使用缩进对齐,而非在->两侧添加空格;
- 若团队已有自定义CS规则(如PHP_CodeSniffer自定义标准),应以团队约定为准,但需确保不与PSR-12冲突。
简言之:不违法 ≠ 应采用。PSR留白之处,应由清晰性、一致性与行业共识来填补——而PHP社区二十年来的共同选择,早已写在每一行优雅的$this->xxx之中。











