hktr92/oopize

让PHP成为一个更面向对象的友好环境。

v0.4.5 2020-10-13 14:20 UTC

This package is auto-updated.

Last update: 2024-09-29 05:29:05 UTC


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 中重写这些功能。)

这有两个原因

  1. 这就是这个项目是如何产生的(StringUtilNumberUtilClassUtil 是为我的一个项目编写的)
  2. 这就是我维护、扩展和改进这个项目的原因。

结构

Util 目录中,定义了各种功能。实现方式不同,可以是部分或完全静态方法。

例如,StringUtil 是完全静态的,而 ArrayUtil 是部分静态的(因为你可以使用 $foo = new ArrayUtil;

Traits 目录中,你将拥有针对类使用的特性。

例如,你可以用 $this->callGetter('foo'); 代替 ClassUtil::callGetter($this, 'foo');

PHP扩展

如前所述,我开始尝试使用 Zephir。这意味着这个库将作为PHP扩展提供(为了更好地处理内存消耗),但也会发布基于生成的IDE存根的PHP polyfill。