操作符前后空格的PSR规范解析
" />
psr-2和psr-12均未强制规定`$this->`操作符前后是否允许空格,语法上两者均合法;但为保障可读性与社区一致性,应始终采用无空格风格(如`$this->name`),避免使用`$this -> name`。
在PHP面向对象编程中,$this->是访问当前实例属性或方法的核心语法结构。尽管PSR-2(已归档)和现行通用的PSR-12《Extended Coding Style Guide》详细规范了类声明、缩进、括号、命名等规则,但均未对箭头操作符(->)两侧的空白字符作出任何强制性要求。这意味着以下两种写法在技术层面均符合PSR:
return $this->name; // ✅ 符合PSR(推荐) return $this -> name; // ✅ 语法合法,但不推荐
然而,“允许”不等于“推荐”。PSR的核心目标之一是提升代码的可读性、一致性和协作效率。从实践角度看:
- 无空格形式($this->name)是PHP社区数十年来的绝对主流惯例,被所有主流框架(Laravel、Symfony、Zend)、静态分析工具(PHPStan、Psalm)及IDE(PhpStorm、VS Code + PHP Intelephense)默认识别和高亮;
- 添加空格($this -> name)会破坏视觉连贯性:-> 是一个不可分割的操作符,人为拆分它(如 $this + 空格 + -> + 空格 + name)反而增加认知负担,降低扫描效率;
- 唯一被广泛接受的空格使用场景是方法链式调用中的换行缩进,此时空格服务于垂直对齐,而非水平分隔:
$user->setName('Alice')
->setEmail('alice@example.com')
->activate(); // 每行以->开头,缩进统一,逻辑清晰⚠️ 注意:即使在此类链式调用中,也绝不在同一行内于->两侧插入空格(如$user -> setName()是反模式)。
结论与建议:
✅ 始终使用 $this->property 或 $this->method() —— 无空格、紧凑、高效;
❌ 避免 $this -> property 或 $this -> method() —— 违背社区共识,降低代码专业度;
? 可通过PHP-CS-Fixer配置自动修复(例如启用 no_spaces_after_function_name 不适用,但自定义规则或使用 php-cs-fixer 的 operator_linebreak + binary_operator_spaces 组合可强化一致性)。
遵循这一约定,既是尊重PSR“务实兼容”的精神,更是践行专业PHP开发的基本素养。











