繁体   English   中英

为什么 php 编译器 (HPHP) 难以动态构造?

[英]Why are dynamic constructs difficult for php compilers (HPHP)?

我正在阅读 Paul Bigger 的http://blog.paulbiggar.com/archive/a-rant-about-php-compilers-in-general-and-hiphop-in-particular/他提到 HPHP 并不完全支持动态构造。 然后他说:“不过,一种天真的方法就是插入一个 switch 语句,然后编译所有有意义的东西。” 他是说您可以使用 switch 语句来包含正确的文件,而不是动态包含吗? 如果是这样,为什么这会起作用,为什么编译器“更容易”编译? 一如既往,感谢您的时间!

据我了解,如果你有这个

 include "$foo.php";

编译器不知道你要包含什么。 另一方面,有了这个

  switch($foo) {
     case 'bar'  : include "bar.php";
     case 'quux' : include "quux.php";
  }

他们可以简单地编译“bar”和“quux”并将它们包装在一个 if 语句中,该语句检查$foo并执行任何适当的操作。

编译器希望能够识别正在编译的程序可能使用的所有源文件和二进制文件。

include($random_file); 

如果 $random_file 中命名的文件声明了常量、类、变量,编译器将无法知道,因为 $random_file 的值在编译时是未知的。 使用这些常量、类和变量的代码将以难以调试的方式失败。 switch 语句将知道可能的文件列表,以便编译器可以发现任何相关的声明。

设计用于编译的语言具有动态链接器和外部 function 接口,它们结合起来提供类似的功能来 include($random_file) 而不需要显式开关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM