Chr*_*ian 2 javascript php syntax parsing
我需要一些PHP代码将一些PHP转换为JS.
问题是转换语法.我不需要完整的PHP语法,请注意; 不需要支持类定义/声明.这是一个需要转换的小清单:
请注意,生成的代码几乎与PHP环境无关,因此没有"如果它使用PHP类会怎么样?".
我不是要求提供完整的代码,只是提示这种转换的正确方向; 我在考虑使用状态机/引擎.
如果您对我为什么要将代码推送到用户方面感到好奇:我需要一种动态的方法来改变某些条件下某些元素的可见性.我的计划是在不必执行此代码服务器端并进行不必要的ajax调用的情况下执行此操作.
编辑:看人.我知道没有使用AJAX听起来很荒谬,但世界并不适用于炒作和听起来不错的设计条件(= ajax).我根本无法承受每个用户每秒轮询我的服务器5到10次,只是为了让我的服务器返回"是"或"否"的答案.请记住,切换是异步的,我无法缓冲AJAX调用.
编辑2:我确信我所做的是在我的情况下最好的方式.没有"可能更好"的方式,所以退出发表非建设性的评论.我不能比我已经有更多细节了.从PHP代码到JS的转换只是缩短用户输入的问题; 我们只需要一个表达式,然后将其转换为必要的语言(在这种特殊情况下,从PHP到JS).无论我如何将系统描述为API规范,并且用无用的(对你而言)原型文档来淹没主题都无济于事,关于它如何工作的条件不会改变.
此外,对于那些认为这个想法来自醒来形成一些梦想的人; 知道这已经在技术开发和质量保证之间进行了审核,所以请不要偏离不存在的设计问题.
编辑3:示例(原始PHP代码和预期输出):
5=="test" - 5=="test"'$'.(func(12)*10) - '$'+(func(12)*10)Fields::count()==5 - Fields.count()==5$this->id==5 - this.id==5关于最后一个例子,不要担心上下文/范围,这是正确的.还要注意表达式可能看起来很奇怪; 这是因为他们是表达; 必须返回值的单行代码,这解释了缺少EOL(;)和多次使用返回布尔值.(异常的东西,如反引号操作符执行,PHP标记,回声,死亡,列表等...故意遗漏)
好的,让我来看看这一个......
螺丝正则表达式.我爱他们,但有一种更好的方式,而且它是内置的.退房token_get_all().它将PHP源解析为字符串,并返回PHP本身使用的相同令牌列表(包括心爱的T_PAAMAYIM_NEKUDOTAYIM).然后,您可以完全重建脚本的源,一次一个令牌,一路上将其转换为Javascript语法.
[charles@teh ~]$ php --interactive
Interactive shell
php > print_r(token_get_all('<?php class Foo { public function bar() { echo "Yikes!"; } } $f = new Foo(); $f->bar(); ?>'));
Array
(
[0] => Array
(
[0] => 368
[1] => <?php
[2] => 1
)
[1] => Array
(
[0] => 353
[1] => class
[2] => 1
)
[2] => Array
(
[0] => 371
[1] =>
[2] => 1
)
[3] => Array
(
[0] => 307
[1] => Foo
[2] => 1
)
...
Run Code Online (Sandbox Code Playgroud)
虽然这可能有点矫枉过正,但它也使用了PHP使用的相同解析规则,因此应该比正则表达式更少长期痛苦.它还使您可以灵活地检测无法翻译的功能(即php-js不支持的功能)并拒绝翻译和/或解决问题.
此外,你仍然没有告诉我们你在做什么,为什么你这样做.仍然可能有更准确,有用的答案.帮助我们为您提供更多信息.