2016-02-27 35 views
6

Próbuję napisać nową linię do pliku z PHP i dostaję następujący błąd:Dlaczego otrzymuję błąd składni w PHP?

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

To jest mój kod:

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

     } 

    } 

I wskazał na linię Błąd występuje z komentarzem php. Co jest nie tak z tą linią?

Przykład lang_contents:

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

Przykład new_contents:

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

Odpowiedz

7

Jeśli próbujesz napisać $lang jako ciąg do pliku

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

obejmująca $lang z " uzyskasz dostęp do swojej $lang, która jest lub nie jest tablicą. od czasu użycia $lang w ścieżce pliku. Zakładam, że to nie jest tablica. Stąd przy użyciu ..."\n$lang['".$line."']... będzie po prostu zadzwonić $lang z indeksem $line

3

spróbować

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

Prawie go masz ... ale $ Lang ma być dosłowny. – ShoeLace1291

3

ten będzie miał wartość zmiennej $lang.

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

Możliwe, że łańcuchy próbują odebrać $ Lang jako wartość. Podwójne cudzysłowy pozwalają, aby zmienne miały tam przekazywaną wartość. użyj pojedynczych cudzysłowów. Wypróbuj to i zobacz, co się stanie.

spróbować tej linii kodu

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

EDIT: Dla najczystszym sposobem napisania tego, czy ten

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

Zamknij, ale \ n zwraca się dosłownie. – ShoeLace1291

+0

spróbuj ponownie, zredagowany post. –

4

String w cudzysłowach są oceniane: W kodzie php próbują ocenić $lang[ ale to generuje błąd, ponieważ php spodziewa $lang (zmienna) lub $lang[n] (tablicę).

Jakie są pożądane wyniki?

Jeśli pragniesz wyjścia dosłownie $ następnie lang znaków, trzeba uciec $:

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

Jeśli chcesz wyświetlamy zawartość $lang zmiennej następnie [ trzeba napisać:

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

W przeciwnym razie, jeśli chcesz wyprowadzić zawartość elementu tablicy $lang[$line], musisz napisać:

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