
psr-2和psr-12均未强制规定`$this->`后是否允许空格,两种写法(`$this->name`与`$this -> name`)在语法和规范层面均合法,但前者是社区公认的可读性更优、更符合实际工程实践的标准写法。
在PHP面向对象编程中,$this关键字用于引用当前实例,其后紧跟对象操作符->访问属性或方法。关于->两侧是否应添加空格,PSR-2(已归档)与现行通用标准PSR-12《Extended Coding Style Guide》均未作任何强制性规定。这意味着以下两种写法在技术上均被允许:
return $this->name; // ✅ 合法,且为事实标准 return $this -> name; // ✅ 语法合法,PSR未禁止,但不推荐
虽然PSR-12第4.3节明确要求“二元运算符(如+, -, ==, ===)前后必须有单个空格”,但->不属于二元运算符——它是PHP语言内置的对象访问操作符(object operator),其语义和解析规则独立于算术/逻辑运算符。因此,PSR对其空格使用保持沉默,属于“未定义即允许”的灰色地带。
值得注意的是,PSR-12确实在方法链式调用(method chaining) 场景下隐含支持换行与缩进式空格,例如:
$user->setName('Alice')
->setEmail('alice@example.com')
->activate();此处换行后的缩进和对齐提升了可读性,这种结构化空白是被鼓励的;但若在单行内插入冗余空格(如$this -> getName()),反而会破坏代码密度、增加视觉噪音,并可能误导开发者误以为->是可拆分的运算符组合。
立即学习“PHP免费学习笔记(深入)”;
✅ 最佳实践建议:
- 始终采用紧凑风格:$this->property 和 $this->method();
- 避免在->两侧添加空格,除非用于多行链式调用中的对齐目的;
- 使用静态分析工具(如PHP_CodeSniffer配合PSR12规则集)可自动检测并拒绝$this ->类写法(需自定义规则或启用Generic.WhiteSpace.DisallowSpaceBeforeSemicolon等扩展检查);
- 团队应通过.php_cs.dist或phpcs.xml统一编码约定,避免因规范模糊引发协作分歧。
归根结底,PSR的核心精神是提升互操作性与可维护性,而非追求形式上的绝对统一。选择$this->name不仅是遵循惯性,更是对PHP社区三十年演化出的清晰、高效、一致的表达共识的尊重。










