约定

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

约定

编码标准文档描述了Symfony项目以及内部和第三方包的编码标准。欧宝娱乐app下载地址本文档描述了核心框架中使用的编码标准和约定,以使其更加一致和可预测。我们鼓励您在自己的代码中遵循它们,但您不需要这样做。

方法名称

当一个对象与相关的“事物”(对象,参数,…)有一个“main”many关系时,方法名被规范化:

  • get ()
  • 设置()
  • 有()
  • 所有()
  • 替换()
  • remove ()
  • clear ()
  • isEmpty ()
  • add ()
  • 注册()
  • count ()
  • 键()

只有在明确存在以下主要关系时,才允许使用这些方法:

  • 一个CookieJar有很多饼干对象;
  • 一个服务容器有许多服务和许多参数(由于服务是主要关系,命名约定用于此关系);
  • 一个控制台输入有许多参数和许多选项。没有“main”关系,因此命名约定不适用。

对于许多不适用该约定的关系,必须使用以下方法(其中XXX是相关事物的名称):

主要的关系 其他关系
get () getXXX ()
设置() setXXX ()
N/A replaceXXX ()
有() hasXXX ()
所有() getxxx ()
替换() setxxx ()
remove () removeXXX ()
clear () clearXXX ()
isEmpty () isEmptyXXX ()
add () addXXX ()
注册() registerXXX ()
count () countXXX ()
键() N/A

请注意

setXXX ()而且replaceXXX ()非常相似,但有一个显著的区别:setXXX ()可以替换或向关系中添加新元素。replaceXXX (),另一方面,不能添加新的元素。如果将无法识别的密钥传递给replaceXXX ()它必须抛出异常。

不以为然的代码

时不时地,框架中的一些类和/或方法会被弃用;当一个特性实现因为向后兼容性问题而无法更改时,就会发生这种情况,但我们仍然想提出一个“更好的”替代方案。在这种情况下,旧的实现可以弃用

弃用只能在受影响组件(或包、桥或契约)的下一个小版本中引入。如果它们非常重要,则可以在以前支持的版本中例外地引入它们。

一个新的类(或者接口,或者特性)不能作为废弃的引入,或者包含废弃的方法。

不能将新方法作为已弃用方法引入。

属性将某个特性标记为已弃用@deprecatedPHPDoc到相关类,方法,属性,…

1 2 3
/ * * *@deprecated从Symfo欧宝娱乐app下载地址ny 2.8开始。* /

弃用消息必须指明该特性被弃用的版本,以及在可能的情况下如何替换它:

1 2 3
/ * * *@deprecated从Symfo欧宝娱乐app下载地址ny 2.8开始,使用Replacement代替。* /

当替换对象在另一个命名空间而不是被弃用的类中时,必须使用它的FQCN:

1 2 3
/ * * *@deprecated从Symfo欧宝娱乐app下载地址ny 2.8开始,使用A\B\Replacement代替。* /

一个PHPE_USER_DEPRECATED还必须触发错误,以帮助人们进行迁移:

1
@trigger_error (sprintf (“自Symfony 2.8以来,“%s”类已弃用,请改用“%s”。”欧宝娱乐app下载地址,弃用::类、更换::类)、E_USER_DEPRECATED);

没有@-silencing运营商,用户将需要选择退出弃用通知。沉默交换了这种行为,并允许用户在准备好应对它们时选择加入(通过添加一个自定义错误处理程序,如Web调试工具栏或PHPUnit桥接所使用的错误处理程序)。

当弃用整个类时trigger_error ()调用应该放在名称空间和use声明之间,就像下面的例子一样ServiceRouterLoader

1 2 3 4 5 6 7 8 9 10
名称空间欧宝娱乐app下载地址组件路由加载程序DependencyInjection使用欧宝娱乐app下载地址组件路由加载程序ContainerLoader;@trigger_error (sprintf (“自Symfony 4.4以来,“%s”类已弃用,请改用“%s”。”欧宝娱乐app下载地址, ServiceRouterLoader::类,ContainerLoader::类)、E_USER_DEPRECATED);/ * * *@deprecated从Symfo欧宝娱乐app下载地址ny 4.4开始,改用Symfony\Component\Routing\Loader\ContainerLoader。* /ServiceRouterLoader扩展ObjectRouteLoader

必须将弃用添加到CHANGELOG.md受影响部件文件:

1 2 3 4
4.4.0----- * Deprecated的“Deprecated”使用更换而不是

它还必须添加到UPGRADE.md目标次要版本的文件(UPGRADE-4.4.md在我们的例子中):

1 2 3 4
DependencyInjection  ------------------- * 弃用“弃用”使用更换而不是

最后,其后果必须加到UPGRADE.md下一个主要版本的文件(UPGRADE-5.0.md在我们的例子中):

1 2 3 4
DependencyInjection  ------------------- * 删除了“弃用”使用更换而不是

所有这些任务都是强制性的,必须在同一个pull请求中完成。

移除弃用代码

删除已弃用的代码只能在受影响组件的下一个主要版本(分支)。

删除弃用代码时,必须将弃用的结果添加到CHANGELOG.md受影响部件文件:

1 2 3 4
5.0.0----- *删除' Deprecated '使用更换而不是

这个任务是强制性的,必须在同一个pull请求中完成。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。