您知道任何已将PHP的本机类型重新定义为对象的项目吗?这可行吗?

Gar*_*hby 4 php types object

您是否知道任何已将PHP的本机类型(字符串,数组,整数,浮点数,布尔值等)重新定义为对象的项目?我不确定它会有多可行,但我只是认为将原生类型作为对象会很好.

例:

$Name = new String('Mary had a little lamb.');
print($Name->Length);  //prints 23
print($Name->Replace('/lamb/', 'duck'));  // prints Mary had a little duck.
Run Code Online (Sandbox Code Playgroud)

这会增加很多开销吗?有什么想法吗?

Nik*_*kiC 6

有很多很多很多(甚至是原生的)项目都是针对那个 - 事情是:没有人使用它们.

基本上有两个问题:

  • PHP只有有限的运算符重载.您不能使+操作员超载.所以总结两个数字你需要写$number->add($number2),这不是很直观.
  • PHP有许多预定义的函数.有人可能会说PHP拥有所有编程语言中功能最强大的标准库.但是:所有这些函数都返回本机类型,而不是盒装函数.所以你需要写一些类似的东西$number = new Number(function_returning_number());.这也适用于第三方库.

对于第一个问题,有一个PECL扩展.它不与PHP捆绑在一起,并且在正常的PHP安装中未启用.所以你不能将它用于便携式应用程序.

为了解决第二个问题,有一个Autoboxing RFC.也许它会被实施,也许不会.