grido/primitive-objects

通过使用原始数据(字符串、数字、数组)作为一等对象,将真正的OOP(面向对象编程)带入您的PHP代码中 :)

v0.1.3 2015-12-17 18:21 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:20:36 UTC


README

通过使用原始数据(字符串、数字、数组)作为一等对象,将真正的“OOP”带入您的PHP代码中。

Build Status

灵感来源

软件工程中的大多数问题都源于代码中某处变量获取了错误值(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之间
  • 并且以大写字母开头
  • 等等 :)

注意事项

这种方法在计算中总是会比真正的原始数据慢。

许可

通用公共许可证。

待办事项

  • 有任何建议吗?