在PHP标准推荐中,创建类实例属于副作用还是声明?
在PHP标准推荐(PSR)中,创建类实例属于副作用还是声明?
在PSR的规范体系里,我们可以通过明确「声明」和「副作用」的定义来判断:
核心定义区分
- 声明:仅指用于定义代码结构的操作,比如创建类、接口、trait、函数、常量等,这类操作不会触发任何外部可见的状态变化或执行逻辑,只是为程序提供可调用的结构。
- 副作用:指除声明之外的所有操作,只要会改变程序状态、产生外部影响或执行非结构定义的逻辑,都属于副作用,比如输出内容、修改全局变量、调用外部API,以及创建类实例。
实例化属于副作用的原因
根据PSR-1的规范要求,创建类实例明确属于副作用:
- 即使类的构造函数是空实现,
new ClassName();操作也会在内存中生成一个对象实例,这本身就是程序状态的变化,符合副作用的定义。 - 如果构造函数包含业务逻辑(比如初始化配置、建立数据库连接、修改全局变量),实例化过程会直接触发这些逻辑,带来更明显的外部影响,完全不属于声明范畴。
PSR的最佳实践
PSR推荐将声明代码与副作用代码分离到不同文件中:
- 一个文件只负责类、函数等结构的声明,不包含任何实例化或执行逻辑。
- 另一个文件专门处理实例化、调用逻辑等副作用操作。
这种分离能提升代码的可维护性和可测试性,避免加载声明文件时意外触发不必要的副作用。
内容的提问来源于stack exchange,提问作者zaza mirotadze
相关产品推荐
相关产品推荐

