5

我认为 HipHop for PHP 是一个有趣的工具。它本质上将 PHP 代码转换为 C++ 代码。以这种方式交叉编译似乎是个好主意,但我想知道,它们如何克服两种类型系统之间的根本差异?我的一般问题的一个具体例子是异构数据结构。静态类型语言不倾向于让您将任意类型放入数组或其他容器中,因为它们需要能够找出另一端的类型。如果我有一个这样的 PHP 数组:

$mixedBag = array("cat", 42, 8.5, false);

这如何在 C++ 代码中表示?一种选择是使用 void 指针(或高级版本 boost::any),但是当你从数组中取回东西时你需要强制转换......而且我根本不相信类型推断器总能弄清楚在另一端投什么。一个更好的选择可能更像是一个联合(或 boost::variant),但是您需要在编译时枚举所有可能的类型......也许可能,但肯定是混乱的,因为数组可以包含任意复杂的实体。

有谁知道从动态打字学科到静态学科的 HipHop 和类似工具如何处理这些类型的问题?

4

1 回答 1

4

它们具有通用变量类型,可以包含任何 PHP 值,并且从 PHP 编译时,此类代码可能会使用这些类型。这意味着将 PHP 值表示为 C++ 类型的部分优势将丢失,但想法是像您展示的那样的代码很少见。

PHP 没有太多的类型,所以拥有一个将它们结合在一起的结构不是问题——这就是 PHP 背后的实际引擎 Zend Engine 所做的。

于 2010-12-25T08:26:28.537 回答