2016-02-27 4 views
6

Я пытаюсь написать новую строку в файл с 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'; 

ответ

7

Если вы пытаетесь написать $lang как строку в файл

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

прилагается $lang с " просто получите доступ к вашему $lang, который представляет собой массив или нет. с вашего использования $lang в вашем пути к файлу. Я предполагаю, что это не массив. Таким образом, используя ..."\n$lang['".$line."']... просто позвонить $lang с индексом $line

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+'); 

     } 

    } 
+0

У вас почти было это ... но $ lang предполагается буквальным. – ShoeLace1291

3

Это будет иметь значение переменной $lang.

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

Возможно, что строки пытаются забрать $ lang в качестве значения. Двойные кавычки позволяют переменным иметь переданное там значение. используйте одинарные кавычки. Попробуйте это и посмотрите, что произойдет.

попробовать эту строку кода

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

EDIT: Для чистейшим образом, чтобы написать это, сделать это

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

Закрыть, но \ n возвращает буквально. – ShoeLace1291

+0

попробуйте еще раз, отредактированный пост. –

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."';"; 
Смежные вопросы