簡體   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