hhvm issues \nFatal error: Uncaught Error: unknown class xhp_x__element in :\nStack trace:\n#0 /Users/user/code/xhp-js-example/example.php(12)
hhvm issues \nFatal error: Uncaught Error: unknown class xhp_x__element in :\nStack trace:\n#0 /Users/user/code/xhp-js-example/example.php(12)
我正在尝试使用 xhp,我发现 运行宁我能找到的一个 xhp 示例 https://github.com/hhvm/xhp-js-example is issuing an error \nFatal error: Uncaught Error: Found top-level code in :\nStack trace:\n#0 {main}
when following the README as is on HHVM 4.71. Removing require_once(__DIR__.'/vendor/autoload.php');
resolves the top-level code error but I'm now stuck with the error \nFatal error: Uncaught Error: unknown class xhp_x__element in :\nStack trace:\n#0 /Users/user/code/xhp-js-example/example.php(12): <unknown>()\n#1 {main}
. I've tried to change the code in example.php to the one found here:
class :introduction extends :x:element {
protected function render(): \XHPRoot {
return <strong>Hello!</strong>;
}
}
class :intro-plain-str extends :x:element {
protected function render(): \XHPRoot {
// Since this function returns an XHPRoot, if you want to return a primitive
// like a string, wrap it around <x:frag>
return <x:frag>Hello!</x:frag>;
}
}
echo <introduction />;
echo PHP_EOL.PHP_EOL;
echo <intro-plain-str />;
因为那行不通,我还尝试了 here 中的简单示例:
<?hh // strict
$user_name = 'Fred';
echo <tt>Hello <strong>{$user_name}</strong></tt>;
但更改为通过将其包装在函数中并按如下方式注释来解决顶级错误:
<?hh // strict
<<__EntryPoint>>
function main(): void {
$user_name = 'Fred';
echo <tt>Hello <strong>{$user_name}</strong></tt>;
}
我会得到一个非常相似的错误 \nFatal error: Uncaught Error: Class undefined: xhp_tt in /Users/user/code/xhp-js-example/example.php:6\nStack trace:\n#0 (): main()\n#1 {main}
任何帮助使这些看似简单的示例工作的帮助将不胜感激,因为在基本示例似乎没有 运行 的情况下尝试这种技术是非常痛苦和令人沮丧的。这是在 Catalina 上使用 hhvm 的 macos 包。
编辑:我也在不使用 xhp-js
的情况下尝试过此操作,它包含在示例存储库中,但我收到了相同的错误消息。
OP 在获得 XHP 运行 HHVM 4.62 时遇到了一些障碍,如评论中所述。
xhp-js
and xhp-js-example
都过时了几年,因此由于对 HHVM 本身的重大更改,它们无法编译,正如 OP 所见。
- 虽然 XHP 语法内置于 Hack 中,但所有标准实现均由
xhp-lib
提供,因此需要自动加载以使用标签和标签的标准库 类 .
- HHVM 4.62 的新增功能是 mandatory FIXME whitelisting, which requires package writers to explicitly specify allowed HH_FIXME codes in the
.hhconfig
. These were added to XHP-lib in 4.0.0rc1,因此当 运行 在 HHVM 4.62 上时,此版本是必需的。
因此,在 4.62 上使用 XHP 的最小项目如下所示:
composer.json
{
"require": {
"hhvm": "~4.62",
"hhvm/hhvm-autoload": "^3.1.3",
"facebook/xhp-lib": "~4.0.0rc1"
}
}
hh_autoload.json
{ "roots": [ "src/" ] }
src/example.hack
require_once(__DIR__ . "/../vendor/hh_autoload.hh");
<<__EntryPoint>>
function main(): void {
echo <div>{1 + 2}</div>;
}
我正在尝试使用 xhp,我发现 运行宁我能找到的一个 xhp 示例 https://github.com/hhvm/xhp-js-example is issuing an error \nFatal error: Uncaught Error: Found top-level code in :\nStack trace:\n#0 {main}
when following the README as is on HHVM 4.71. Removing require_once(__DIR__.'/vendor/autoload.php');
resolves the top-level code error but I'm now stuck with the error \nFatal error: Uncaught Error: unknown class xhp_x__element in :\nStack trace:\n#0 /Users/user/code/xhp-js-example/example.php(12): <unknown>()\n#1 {main}
. I've tried to change the code in example.php to the one found here:
class :introduction extends :x:element {
protected function render(): \XHPRoot {
return <strong>Hello!</strong>;
}
}
class :intro-plain-str extends :x:element {
protected function render(): \XHPRoot {
// Since this function returns an XHPRoot, if you want to return a primitive
// like a string, wrap it around <x:frag>
return <x:frag>Hello!</x:frag>;
}
}
echo <introduction />;
echo PHP_EOL.PHP_EOL;
echo <intro-plain-str />;
因为那行不通,我还尝试了 here 中的简单示例:
<?hh // strict
$user_name = 'Fred';
echo <tt>Hello <strong>{$user_name}</strong></tt>;
但更改为通过将其包装在函数中并按如下方式注释来解决顶级错误:
<?hh // strict
<<__EntryPoint>>
function main(): void {
$user_name = 'Fred';
echo <tt>Hello <strong>{$user_name}</strong></tt>;
}
我会得到一个非常相似的错误 \nFatal error: Uncaught Error: Class undefined: xhp_tt in /Users/user/code/xhp-js-example/example.php:6\nStack trace:\n#0 (): main()\n#1 {main}
任何帮助使这些看似简单的示例工作的帮助将不胜感激,因为在基本示例似乎没有 运行 的情况下尝试这种技术是非常痛苦和令人沮丧的。这是在 Catalina 上使用 hhvm 的 macos 包。
编辑:我也在不使用 xhp-js
的情况下尝试过此操作,它包含在示例存储库中,但我收到了相同的错误消息。
OP 在获得 XHP 运行 HHVM 4.62 时遇到了一些障碍,如评论中所述。
xhp-js
andxhp-js-example
都过时了几年,因此由于对 HHVM 本身的重大更改,它们无法编译,正如 OP 所见。- 虽然 XHP 语法内置于 Hack 中,但所有标准实现均由
xhp-lib
提供,因此需要自动加载以使用标签和标签的标准库 类 . - HHVM 4.62 的新增功能是 mandatory FIXME whitelisting, which requires package writers to explicitly specify allowed HH_FIXME codes in the
.hhconfig
. These were added to XHP-lib in 4.0.0rc1,因此当 运行 在 HHVM 4.62 上时,此版本是必需的。
因此,在 4.62 上使用 XHP 的最小项目如下所示:
composer.json
{
"require": {
"hhvm": "~4.62",
"hhvm/hhvm-autoload": "^3.1.3",
"facebook/xhp-lib": "~4.0.0rc1"
}
}
hh_autoload.json
{ "roots": [ "src/" ] }
src/example.hack
require_once(__DIR__ . "/../vendor/hh_autoload.hh");
<<__EntryPoint>>
function main(): void {
echo <div>{1 + 2}</div>;
}