将 PHP 转换为 JS 的 PHP 代码

标签 php javascript parsing syntax

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




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

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

  • 问题是转换语法。请注意,我不需要完整的 PHP 语法;不需要支持类定义/声明。这是需要转换的小 list :
  • “。”应该是“+”(字符串连接)
  • “->”应该是“.” (对象运算符)
  • “::“应该 ”。” (类运算符 - 并非真正需要)

  • 请注意,生成的代码几乎独立于 PHP 环境,所以没有“如果它使用 PHP 类怎么办?”。

    我不是要完整的代码,只是对这种转换的正确方向的提示;我正在考虑使用状态机/引擎。

    如果您对我为什么将代码推送到用户端感到好奇:我需要一种动态方式来在特定条件下更改特定元素的可见性。我的计划是这样做,而不必在服务器端执行此代码并进行不必要的 ajax 调用。

    编辑:看人。我知道不使用 AJAX 对您来说听起来很可笑,但这个世界并不适合炒作和听起来不错的设计条件 (=ajax)。我根本负担不起每个用户每秒轮询我的服务器 5 到 10 次,只是为了让我的服务器返回"is"或“否”的答案。请记住,切换是异步的,我无法缓冲 AJAX 调用。

    编辑 2:我确信我正在做的是在我的情况下最好的方法。没有“可能更好”的方法,所以不要发表非 build 性的评论。我无法比我已经了解的更详细了。从 PHP 代码到 JS 的转换只是缩短用户输入的问题;我们只需要一个表达式,然后将其转换为所需的任何一种语言(在这种特殊情况下,从 PHP 到 JS)。无论我是否将系统描述为 API 规范,其工作方式的条件都不会改变,并且用无用的(对您而言)原型(prototype)文档淹没该主题将毫无帮助。

    此外,对于那些认为这个想法是在从梦中醒来后产生的;知道这已经在技术开发和 QA 之间进行了审查,所以请不要偏离不存在的设计问题。

    编辑 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 (;) 的缺失以及返回 bool 值的多种用途。 (反引号运算符执行、PHP 标记、echo、die、list 等异国情调的东西。故意遗漏)

    最佳答案

    好吧,让我来看看这个...

    螺丝正则表达式。我喜欢它们,但有更好的方法,它是内置的。查看 token_get_all() .它将 PHP 源代码解析为字符串并返回 the very same tokens that PHP itself uses 的列表(包括心爱的 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
        )
    ... 
    

    虽然这可能有点矫枉过正,但它也使用 PHP 使用的相同解析规则,因此与正则表达式相比,它应该不会带来长期的痛苦。它还使您可以灵活地检测无法翻译的功能(即 php-js 不支持的东西)并拒绝翻译和/或解决问题。

    此外,您还没有告诉我们您在做什么以及为什么要这样做。可能还有更准确、更有用的答案可用。通过向我们提供更多信息来帮助我们帮助您。
  • 您认为轮询是不切实际的,因为预期每秒请求数非常多。你为什么期待这个数字?您的应用程序做了什么会导致这种情况?
  • 为什么要翻译 PHP 代码而不是编写特定的 Javascript?您只是稍微操作了页面内容,为什么需要 PHP 代码来做出决定?
  • 语言翻译可能是解决这个问题最简单的方法,因此是一个非常糟糕的想法。它不可能作为第一选择。您还有哪些其他选择,为什么它们被排除在外?
  • 关于将 PHP 转换为 JS 的 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235973/

    相关文章:

    javascript - 从 Canvas 转换后如何将图像作为表单的一部分提交?

    xml - 使用 Go 解析时如何检查输入 XML 中的错误?

    用于解析源代码文件的.Net 库?

    javascript - 如何检测 json 不是 json (它是 html)

    php - 注意第 16 行 : Undefined variable: email in/Applications/XAMPP/xamppfiles/htdocs/menthor/login. php

    具有多表查询的 PHP 邮件功能

    php - switch布局问题

    php - 如何使用 explode() 将查询值拆分为多个多行以用于选择标记

    javascript - 优化javascript显示样式

    javascript - 如何防止图例被 chop GOOGLE CHARTS