2013-02-14 121 views
1

我經常需要將大字符串分配給變量。在源代碼中,我最好希望將我的行保留在80個字符之內。防止PHP解釋源代碼中字符串中的新行

理想情況下,我希望能夠在多行上放置這些文字字符串。

我想避免的是使用串聯或函數調用(例如preg_replace())將多個字符串連接在一起。我不喜歡這種想法,爲了改善我的代碼風格,我必須調用語言功能。

的一些例子,我想:

$text = <<<TEXT 
Line 1 
Line 2 
Line 3 
TEXT; 
    echo($text); 

這應該輸出:

Line1Line2Line3 

這可能嗎?

+0

你真的無法避免周圍的字符串連接工作這一個...一個多行字符串中的換行是一個換行符。 – Ocramius 2013-02-14 00:51:19

+0

我讀過這3次,但它仍然沒有任何意義。你想剝離換行符,以便瀏覽器源碼看不到新行嗎? – 2013-02-14 00:52:47

+0

@ Lawrence Cherone:OPs Coding Conventions否認他使用超過80個字符的代碼行,所以他想分割他們 – zerkms 2013-02-14 00:53:46

回答

3

有幾個選項:

  1. 正好連接(首選)

  2. 使用array構建

  3. 使用sprintf()

只是合作ncatenate:

echo 'long long line1' 
    . 'another long line 2' 
    . 'the last very long line 3'; 

什麼效率?

上面的代碼編譯成以下的操作碼(這是什麼運行):

5 0 > CONCAT  ~0  'long+long+line1', 'another+long+line+2' 
    1  CONCAT  ~1 ~0, 'the+last+very+long+line+3' 
    2  ECHO  ~1 

正如你所看到的,它通過連接頭兩行建立字符串,然後是最後一行;丟棄最後的~0。在內存方面,差異可以忽略不計。

這是一個單echo聲明會是什麼樣子:

3 0 > ECHO    'long+long+line1another+long+line+2the+last+very+long+line+3' 

從技術上講它的速度更快,因爲沒有中間步驟,但在現實中,你會不會覺得什麼不同。

使用array

echo join('', array(
    'line 1', 
    'line 2', 
    'line 3', 
)); 

使用sprintf()

echo sprintf('%s%s%s', 
    'line 1', 
    'line 2', 
    'line 3' 
); 
+0

沒有理由更喜歡第一和第二第三)至少他們沒有帶來任何明顯的好處 – zerkms 2013-02-14 00:54:24

+1

@zerkms謝謝,我已經使我的意見更清晰:) – 2013-02-14 00:57:32

+0

@zerkms什麼是效率? – 2013-02-14 02:18:49

1
$text = 'Line1'. 
     'Line2'. 
     'Line3'; 

var_dump($text); 

這樣你就可以將你的代碼分成幾行,但數據本身就是一行代碼。

0

有很多方法來連接字符串,但問題是不是字符串的長度,也沒有格式化的,你正在混合大量的標記與PHP。

IMO真的,如果您的應用程序的核心邏輯包含大量的html,那麼您應該考慮將其移出邏輯並從外部文件加載它,這樣可以提高代碼的可讀性。

./your_view.php

<h1>This is my view, I only want small amounts of PHP here, values will be passed to me</h1> 
<p><?php echo $somevar;?></p> 

現在你的核心邏輯中,你或許會擁有加載你的觀點和將數據傳遞給它的全局函數。那麼你可以控制刪除新行。

的index.php(或邏輯文件)

<?php 
function load_view($path,$data,$minify=false) { 
    if (file_exists($path) === false){ 
     return false; 
    } 
    extract($data); 
    ob_start(); 
    require($path); 
    $out = ob_get_contents(); 
    ob_end_clean(); 
    //you can remove all the new lines here 
    if($minify===true){ 
     return preg_replace('/^\s+|\n|\r|\s+$/m', '', $out); 
    }else{ 
     return $out; 
    } 
} 

$data = array('somevar'=>'This is some data that I want to pass to a block of html'); 

echo load_view('./your_view.php',$data,true); 
?> 
+0

爲什麼你認爲OP在web服務器下運行腳本,而不是在CLI中運行? HTML和模板如何與問題相關?你有一些OP想要遵循的長字符串。絕對不是答案。 – zerkms 2013-02-14 02:28:06

+0

PS:你的'$ minify'會破壞數據 - 你只是**不能**從上下文中刪除新行。 HTML中的換行符是一個重要的特徵 - 它可能會改變結果。 – zerkms 2013-02-14 02:31:39