2016-02-27 32 views
6

Tôi cố gắng để viết một dòng mới vào một tập tin với PHP và tôi nhận được lỗi sau:Tại sao tôi nhận được lỗi cú pháp trong PHP?

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

Đây là mã của tôi:

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

     } 

    } 

tôi đã chỉ ra những dòng lỗi xảy ra trên với một bình luận php. Điều gì là sai với dòng này?

Ví dụ về lang_contents:

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

Ví dụ về new_contents:

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

Trả lời

7

Nếu bạn cố gắng để viết $lang như chuỗi vào tập tin của bạn

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

kèm theo $lang với " sẽ chỉ truy cập vào $lang của bạn hoặc không phải là mảng. kể từ khi bạn sử dụng $lang trong đường dẫn tệp của mình. Tôi cho rằng đó không phải là một mảng. Do đó sử dụng ..."\n$lang['".$line."']... chỉ sẽ gọi $lang với một chỉ số của $line

3

thử này

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

Bạn gần như đã có ... nhưng $ lang được cho là có nghĩa đen. – ShoeLace1291

3

này sẽ có giá trị của biến $lang.

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

Có thể các chuỗi đang cố gắng chọn $ lang làm giá trị. Dấu ngoặc kép cho phép các biến có giá trị được chuyển đến đó. sử dụng dấu nháy đơn. Hãy thử điều này và xem những gì sẽ xảy ra.

thử dòng mã này

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

EDIT: Đối với cách sạch để viết những dòng này, làm điều này

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

Đóng, nhưng \ n trả về theo nghĩa đen. – ShoeLace1291

+0

thử lại, chỉnh sửa bài đăng. –

4

String trong dấu ngoặc kép được đánh giá: trong mã, php thử của bạn để đánh giá $lang[ nhưng điều này tạo ra một lỗi vì php hy vọng $lang (một biến) hoặc $lang[n] (một mảng).

Sản lượng mong muốn của bạn là gì?

Nếu bạn mong muốn đầu ra theo nghĩa đen một $ tiếp theo lang ký tự, bạn phải thoát khỏi $:

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

Nếu bạn muốn sản lượng nội dung của $lang biến tiếp theo là một [ bạn phải viết:

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

Nếu không, nếu bạn muốn xuất nội dung của $lang[$line] mục mảng, bạn phải viết:

$new_contents = $lang_contents."\n{$lang[$line]} = '".$value."';"; 
Các vấn đề liên quan