storyg / ppcs
Requires
- php: >=7.0
Requires (Dev)
- php: >=7.0
- phpunit/phpunit: ^6
This package is auto-updated.
Last update: 2024-09-13 13:23:17 UTC
README
单一代码风格
PHP常常被看作是难以维护和阅读的,也有许多对PHP代码质量不好的刻板印象。但随着像Laravel这样的优美框架的出现,PHP的地位也在逐渐提高。然而,之前的PHP开发者们仍然以同样的风格编写PHP。这并不是什么坏事。为了高效地编写代码,这可能是一个不可避免的选择。但是,为了维护和协作,需要一种代码风格。可预测的PHP风格(PPCS)将成为有助于您进行维护的代码风格。
变量命名
以下不讨论的内容应遵循一般的代码约定。
- 局部函数变量以'_'为前缀命名
- 传入参数的变量以'_'为后缀命名
- 成员变量以没有前缀和后缀的普通名词形式命名
成员变量的访问限定符
PHP对象成员变量仅使用private
或protected
指定
使用ValueObject trait
PHP中有时会传递对象变量以传递值。如果传递的变量是Value Object且不应该更改,那么成员变量不应该更改。但同时也不能阻止查看成员变量的值。因此,使用ValueObject trait来使用不可变对象。您不必担心您传递的对象被更改。
使用TrustableObj trait
提供一般代码风格
当使用PHP对象时,我们将其声明为public,以便外部可以访问变量。在一般的PHP中,变量如下所示使用:
$obj->val1;
为了防止对象的内部访问,我们将成员变量改为private
或protected
,然后声明getter,如下所示更改:
$obj->getVal1();
这种代码风格有两个原因看起来不太美观。
- getter和
->
实际上没有意义。 - PHP应该放弃这种漂亮代码风格。
我们只是声明getter并传递值,因此getter的声明和传递值之间没有区别。使用getter来获取值或使用->
运算符或没有区别,但由于访问限制符,不能使用->
运算符,因此代码看起来不太美观。
使用TrustableObject trait可以即使使用访问限制符也可以使用->
运算符。
支持外部无法更改对象内部变量
当对象成员变量是对象时,如果使用->
调用,则克隆并传递。
#예제
使用changer而不是setter
setter破坏可预测性的代码风格。我们不创建或管理常规setter。允许外部随意更改内部值。这种风格与将变量声明为public
一样。如果需要从外部更改变量值,则声明changer而不是setter,并详细编写更改时发生的约束条件。
允许未声明的变量赋值
PHP提供了破坏可预测性的语法元素。
class Cat { private $name; private $age; } $user = new User(); $user->name = 'navi'; $user->age = 1; $user->weight = '2kg';
上面的代码展示了PHP的基本语法,允许分配未声明的成员变量weight
。这种语法元素破坏了可预测性。TrustableObj阻止以这种方式破坏可预测性的代码。