为什么我在PHP中遇到语法错误?

时间:2016-02-27 01:29:50

标签: php

我正在尝试使用PHP向文件写一个新行,我收到以下错误:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

这是我的代码:

public function add_line($line, $value, $file){

        $CI =& get_instance();
        $CI->load->helper('file');

        foreach($this->existing_langs as $lang){

            $lang_contents = read_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php');

            $new_contents = $lang_contents."\n$lang['".$line."'] = '".$value."';"; //Error happens on this line

            write_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php', $new_contents, 'w+');

        }

    }

我已经用php注释指出了错误发生的那一行。这条线有什么问题?

lang_contents的例子:

<?php
$lang['1234'] = 'Restaurants';

new_contents示例:

<?php
$lang['1234'] = 'Restaurants';
$lang['1235'] = 'Transportation';

5 个答案:

答案 0 :(得分:7)

如果您尝试将$lang作为字符串写入文件

$lang_contents."\n".'$lang'."['".$line."'] = '".$value."';";
<{1>将$lang"括起来只会访问您的$lang是否为数组。 因为您在文件路径中使用$lang。我假设它不是一个数组。因此,使用..."\n$lang['".$line."']...只会使用$lang

的索引来调用$line

答案 1 :(得分:4)

字符串可能会尝试将$ lang作为值。双引号允许变量具有在那里传递的值。使用单引号。试试这个,看看会发生什么。

尝试这行代码

 $new_contents = $lang_contents . "\n".'$lang[\'' . $line . '\'] = \'' . $value . '\';';

编辑:要想用最干净的方式写这个,请执行此操作

$new_contents = "$lang_contents\n\$lang['$line'] = '$value';";

答案 2 :(得分:4)

双引号中的字符串被评估:在你的代码中,php尝试评估$lang[但这会产生错误,因为php需要$lang(变量)或$lang[n](数组)

您想要的输出是什么?

如果您希望输出字面上$后跟lang个字符,则必须转义$

$new_contents = $lang_contents."\n\$lang['".$line."'] = '".$value."';";

如果您想要输出$lang变量后跟[的内容,您必须写:

$new_contents = $lang_contents."\n$lang"."['".$line."'] = '".$value."';";

否则,如果要输出$lang[$line]数组项的内容,则必须写:

$new_contents = $lang_contents."\n{$lang[$line]} = '".$value."';";

答案 3 :(得分:3)

试试这个

public function add_line($line, $value, $file){

        $CI =& get_instance();
        $CI->load->helper('file');

        foreach($this->existing_langs as $lang){

            $lang_contents = read_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php');

            $new_contents = $lang_contents."\n$lang\['".$line."'] = '".$value."';"; //Error happens on this line

            write_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php', $new_contents, 'w+');

        }

    }

答案 4 :(得分:3)

这将具有变量$lang的值。

$new_contents = $lang_contents."\n" . $lang . "['".$line."'] = '".$value."';";
相关问题