PSR-1 2.3 副作用规则
Posted
技术标签:
【中文标题】PSR-1 2.3 副作用规则【英文标题】:PSR-1 2.3 Side Effects Rule 【发布时间】:2012-10-29 05:24:22 【问题描述】:我有一个关于 php 基本编码标准 PSR1 的问题。 PSR 1 规则 2.3 规定:
规则 2.3 副作用
文件应该声明新符号(类、函数、常量、 等)并且不会导致其他副作用,或者它应该使用 side 执行逻辑 效果,但不应该两者都做。
短语“副作用”是指执行不直接相关的逻辑 声明类、函数、常量等,仅仅因为包含 文件。
“副作用”包括但不限于:生成输出、显式 使用'require'或'include',连接到外部服务,修改ini 设置,发出错误或异常,修改全局或静态变量, 读取或写入文件,等等。
有人可以给我一个支持使用此规则的论据吗? 或者,解释这条规则的好处,以及为什么它很重要或实施的好主意。 这将帮助我支持 PSR 1 的全面实施并成为一个很好的案例。
【问题讨论】:
【参考方案1】:这个想法是,当一个类被自动加载时,应用程序的状态不应该改变。 任何修改状态的代码(实际执行的代码)都应该在不同的文件集中。
这使它可预测,并迫使您将逻辑保留在类方法中,并且是隐式的。
请记住,存在编码标准,因此人们以类似的风格进行编码。采用编码标准的好处是您的代码库是自洽的,并与遵循规则的其他项目保持一致。
PSR-1 在很大程度上遵循每个人已经在做的事情。如果您觉得需要在定义类的同一位置执行逻辑,则很可能有更好的位置或方法。
最后.. 不要为了使用 PSR-1。如果你有正当理由不遵守某些地方的规则,那就打破规则。它们不是法律。常识至上。
来源:我是该文档的贡献者之一。
【讨论】:
使代码可测试以测试这样做的一个实际理由吗?即,如果声明函数/类的文件中没有其他内容,则更容易加载和测试函数/类。 @michaelmcandrew 是的,这可能是一个原因。我想我通常希望类自动加载除了要定义的新符号之外没有任何副作用。以上是关于PSR-1 2.3 副作用规则的主要内容,如果未能解决你的问题,请参考以下文章