像Hiphop for PHP这样的工具如何处理异构数组?

Der*_*urn 5 php c++ compiler-construction types hiphop

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

$mixedBag = array("cat", 42, 8.5, false);
Run Code Online (Sandbox Code Playgroud)

如何用C++代码表示?一种选择是使用void指针(或高级版本,boost :: any),但是当你把数据从数组中取出时你需要进行转换...而且我完全不相信类型推理器总能找出在另一端施放的东西.或许,一个更好的选择可能更像是union(或boost :: variant),但是你需要在编译时枚举所有可能的类型......也许是可能的,但肯定是凌乱的,因为数组可以包含任意复杂的实体.

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

Sta*_*asM 4

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

PHP 没有太多类型,因此拥有一个将所有类型统一起来的结构不是问题 - 这就是 PHP 背后的实际引擎 Zend Engine 所做的事情。