hktr92 / oopize
让PHP成为一个更面向对象的友好环境。
Requires
- php: >=7.1
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
- doctrine/inflector: ^1.3
- symfony/polyfill-ctype: ^1.13
- symfony/polyfill-php73: ^1.13
README
本项目的目标是让PHP成为一个更面向对象的友好环境。
想象一下:你正在开发一个企业级应用,使用Symfony,一切看起来都很漂亮...
...直到你需要使用 explode()
来通过分隔符拆分字符串。或者为了代码模板化,检查JSON是否解析无错误(PHP 7.3之前)。或者确保字符串不为空。
PHP默认不提供对标量类型的面向对象支持,因此你不会很快就能这样做 $var = "foo"; $var->empty();
(尽管有一个关于此的RFC)。
关于稳定性
由于它处于早期阶段,维护版本比较困难。最初的想法是
- 0.x.y 版本用于表示API版本。当这个库基本完成时,将发布 1.x.y 版本,包含主要改进、稳定性和更安全。
- x.0.y 版本用于表示功能类,例如 0.1.0 - StringUtil,0.2.0 - 添加 ClassUtil,等等。
- x.y.0 版本用于表示功能类改进,例如 0.1.1 - StringUtil 修复,0.2.1 - ClassUtil 新功能
但这很荒谬。当然,最新版本应该总是包含每个实用类最新版本。但最旧的版本将始终是更成熟的版本。
在每次提交后增加版本标记是非常难以维护的,需要手动操作。
因此,我建议始终使用 dev-master
,因为它总是最新版本,并包含最新功能和修复。不,我不会进行BC破坏,v1.0.0
将在另一个分支上进行,php-ext-oopize
将在另一个存储库上进行。(是的,我开始在 zephir 中重写这些功能。)
这有两个原因
- 这就是这个项目是如何产生的(
StringUtil
、NumberUtil
和ClassUtil
是为我的一个项目编写的) - 这就是我维护、扩展和改进这个项目的原因。
结构
在 Util
目录中,定义了各种功能。实现方式不同,可以是部分或完全静态方法。
例如,StringUtil
是完全静态的,而 ArrayUtil
是部分静态的(因为你可以使用 $foo = new ArrayUtil;
)
在 Traits
目录中,你将拥有针对类使用的特性。
例如,你可以用 $this->callGetter('foo');
代替 ClassUtil::callGetter($this, 'foo');
。
PHP扩展
如前所述,我开始尝试使用 Zephir。这意味着这个库将作为PHP扩展提供(为了更好地处理内存消耗),但也会发布基于生成的IDE存根的PHP polyfill。