【问题标题】:Do you know of any project that has redefined the native types of PHP as objects? Is it feasible?你知道任何将 PHP 的原生类型重新定义为对象的项目吗?可行吗?
【发布时间】:2011-11-24 15:02:38
【问题描述】:

您是否知道任何将 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.

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

【问题讨论】:

  • Java 有用于基元的对象包装器,允许将它们传递给期望对象的方法,但由于 PHP 是一种弱类型语言,我认为重新发明轮子没有多大意义。

标签: php object types


【解决方案1】:

有很多很多很多 (even native) 项目的目标是:没有人使用它们。

基本上有两个问题:

  • PHP 只有有限的运算符重载。您不能重载 + 运算符。因此,要将两个数字相加,您需要编写 $number->add($number2),这不太直观。
  • PHP 具有大量预定义函数。有人可能会说 PHP 拥有所有编程语言中最强大的标准库。但是:所有这些函数都返回本机类型,而不是装箱的类型。所以你需要写$number = new Number(function_returning_number());之类的东西。这也适用于第 3 方库。

第一个问题是PECL extension。但是它没有与 PHP 捆绑在一起,并且在普通的 PHP 安装中也没有启用。所以你不能将它用于便携式应用程序。

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

【讨论】:

  • 是的,有限的运算符重载是这个想法的一个大问题。
【解决方案2】:

也许有人可以澄清这一点,因为我对这个主题并不完全了解 - 但是 PHP 在 Zend 引擎上运行(C++),因此如果你足够熟练,可能会实现你的上述想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多