grido / primitive-objects
通过使用原始数据(字符串、数字、数组)作为一等对象,将真正的OOP(面向对象编程)带入您的PHP代码中 :)
v0.1.3
2015-12-17 18:21 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: 5.0.*
This package is not auto-updated.
Last update: 2024-09-14 18:20:36 UTC
README
通过使用原始数据(字符串、数字、数组)作为一等对象,将真正的“OOP”带入您的PHP代码中。
灵感来源
软件工程中的大多数问题都源于代码中某处变量获取了错误值(c)Erlang作者。
为什么?
当您在代码中的某个地方将一些值赋给$x时,您总是需要检查$x可以使用的几个地方(在其他函数甚至在其他文件中)。如果出现问题,您需要跟踪代码并找到$x获取错误值的地方。我认为在代码的任何地方、在任何时刻、在任何一行中,确保$x始终具有有效的值会更好。
Simple rule: if you have a variable - it contains a valid value.
Always.
当您期望函数的参数是几个“原始类型”时,您总是需要验证其内部。这是一个低效的方法,它产生了很多不可用的代码。通过真正的函数式语言带来的约定原则进行验证和操作要更好。
Each thing must be an object.
关键思想
字符串是一个对象。数字是一个对象。数组是一个对象(它也包含对象)。您想编写这样的东西吗?
function doCoolStuff( String $name, Numeric $weight ) {
// you will get exception if $name is not string, and/or $weight is not numeric,
// without ANY other checks or validations in your function's body.
}
或者,例如
$data->getHistoryOfChanges() // -> [ 'value 1', 'value 2', null, 'value 3' ]
或者
"Person"->pluralize() // -> "People"
现在可能可以做到了 :)
当前功能
- 字符串对象
- 数字对象
- 数组对象(可遍历的)
- 几个约束(数字、最小值、最大值、字符串)
- 值更改历史
如何工作
查看test/PrimitiveObjectsTest.php中的代码示例以了解。
所有验证和约束都封装在对象类中,如果不正确数据到达函数体之前,您将得到一个异常。
您可以通过拒绝更改数据来创建“不可变对象”,如果值已经设置。
您可以在运行时通过组合不同的约束来创建自己的“类型”的对象。例如,您可以创建
- 字符串数组
- 最大项数为10
- 每个项是一个字符串,长度在1..255之间
- 并且以大写字母开头
- 等等 :)
注意事项
这种方法在计算中总是会比真正的原始数据慢。
许可
通用公共许可证。
待办事项
- 有任何建议吗?