Improve this question
我需要一些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标记,回显,死亡,列表等。被故意遗漏了)
参考方案
好吧,让我at一下这个...
螺丝正则表达式。我喜欢它们,但是有更好的方法,它是内置的。请查看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代码才能做出此决定?
语言翻译可能是解决此问题的最简单方法,因此是一个令人震惊的想法。不可能将其作为第一选择。您还有其他选择吗?为什么要排除这些选择?
最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…
PHP OOP概念付诸实践 - php目前,我所拥有的是一份以程序庄园形式编写的审查表。我想更改一些内容,并希望在此过程中,根据过去的经验,在OOP中,网站的整个审核部分会更好。数据流如下:HTML表单=>提交=> jQuery验证=>? => PHP验证=>添加记录我的问题是要了解将POST数据传递给类的正确方法是使用AJAX / jQuery或使用具有标准感谢页…
PHP-将日期插入日期时间字段 - php我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
PHP-如何获取类的成员函数列表? - php如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友