用于将PHP转换为JS的PHP代码

Chr*_*ian 2 javascript php syntax parsing

我需要一些PHP代码将一些PHP转换为JS.

  • 功能 - 我正在使用php.js中常见的PHP函数
  • 句法 - ???

问题是转换语法.我不需要完整的PHP语法,请注意; 不需要支持类定义/声明.这是一个需要转换的小清单:

  • "" 应该是"+"(字符串concat)
  • " - >"应为"." (对象运算符)
  • "::" 应该 "." (班级操作员 - 不是真的需要)

请注意,生成的代码几乎与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标记,回声,死亡,列表等...故意遗漏)

Cha*_*les 7

好的,让我来看看这一个......

螺丝正则表达式.我爱他们,但有一种更好的方式,而且它是内置的.退房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不支持的功能)并拒绝翻译和/或解决问题.


此外,你仍然没有告诉我们你在做什么,为什么你这样做.仍然可能有更准确,有用的答案.帮助我们为您提供更多信息.

  • 您认为由于每秒预计会有大量的请求,因此轮询是不切实际的.你为什么期待这个数字?你的应用程序做了什么会导致这样的情况?
  • 为什么要翻译PHP代码而不是编写特定的Javascript?您只是稍微操纵页面内容,为什么需要PHP代码来做出决定?
  • 语言翻译可能是解决这个问题的最简单的解决方案,因此是一个非常糟糕的想法.它不可能作为第一种选择.你有什么其他选择,为什么排除它们?

  • 啊,现在我明白了.你让用户有效地输入要执行的代码的事实解释了一切. (2认同)