使用php自动生成C ++代码

时间:2011-11-02 12:42:36

标签: php

如果您只想在没有太多解释的情况下查看问题,请向下滚动

我有一个很大的应用程序,有很多值用作选项。应用程序的控件是一个网站,应用程序本身就是C ++,所有选项都存储在MySQL中,这样C ++和php都可以访问它。 所以我使用php从文本文件中读取一堆值,并自动生成SQL,C ++和php代码,因为这些选项在任何地方都使用,并且实现太大,以至于实现它们需要很长时间,并且会过多在将来添加额外选项的麻烦。

这是我的文本文件的一行看起来像

`input_video_standard`|:|INT|:|NOT NULL DEFAULT '0'|:|profile->input.videoStandard|:|Video Standard|:|SD 576i@50Hz (B,G/PAL)|:|SD 480i@59.94Hz (NTSC)|:|HD 720p@50Hz|:|HD 720p@59.94Hz|:|HD 1080i@25Hz|:|HD 1080i@29.97Hz

一旦我读到该行,我就用

$pieces = explode("|:|", $line);

这部分现在用于生成C ++代码 我有一个名为变量的数组,其中我存储了C ++变量的名称以及它的类型。

$variables[] = array($pieces[1], $pieces[3]);

一旦我遍历文本文件并收集所有数据

我尝试创建一个字符串,稍后我会将其存储在文本文件

$cpp .= "memset(prof,0,sizeof(prof));\n";
$cpp .= "sprintf(prof, \"CALL put_into_input(%d, 'test'";
for($i = 3; $i<count($variables); $i++)
{
    if(strpos($variables[0], "VARCHAR") === FALSE)
    {
        $cpp .= ", %d";
    }
    else
    {
        $cpp .= ", '%s'";
    }
}
$cpp .= "\nprofile-".">"."pfile";
for($i = 3; $i<count($variables); $i++)
{
    $cpp .= ",\n".$variables[1];
}
$cpp .= ");\n";

问题

问题是,当我尝试将字符串 profile-&gt; input.videoStandard 连接到我的主字符串时,它只是将其保存为数组,我注意到php不喜欢 - &gt;作为一般的字符串,这就是为什么我在任何地方使用“ - ”。“&gt;”的原因。我如何获得接受的PHP - &gt;作为一个字符串?

感谢任何人的帮助。

3 个答案:

答案 0 :(得分:2)

  

我注意到php不喜欢 - &gt;作为一般的字符串。

字符串中的->没有错。

除非那里还有一些$

这将导致PHP认为您正在尝试访问对象实例的属性。

E.g。 $object->something。您可以使用单引号而不是双引号来阻止PHP尝试解析字符串。除此之外,在字符串中使用->应该没有任何问题。

修改

你的代码看起来很奇怪。

你正在做$variables[] = array($pieces[1], $pieces[3]);

$variables = array(array($pieces[1], $pieces[3]));

相同

所以你只有$variables[0]而不是$variables[1]

答案 1 :(得分:1)

在PHP中,解析 double 引号中的变量。

$var = "hello";
$str = "This is a variable: $var";

// The value of $str will be "This is a variable: hello"

当您使用单个引号时,不会解析变量。

$var = "hello";
$str = 'This is a variable: $var'; // Please note the single quotes here

// The value of $str will be "This is a variable: $var"

我认为在您的情况下,->被识别为变量,因为这是用于面向对象编程以获取属性和方法的语法。

$object->property;
$object->method();

我个人使用单引号,只要我不需要为变量或正则表达式解析我的字符串。

Single quote strings

Double quote strings

答案 2 :(得分:-2)

您可以使用撇号而不是引号吗?