2010-03-22 106 views
2

如何在我的源代碼中格式化很長的字符串?
我遵循規則,該行代碼不應超過80個字符。
(其他規則是Zend Framework格式化標準)如何在數組中格式化長字符串

例如,

protected $_messages = array(
    'key1' => 'very, very long string lorem ipsum dolor sit amet…', 
    'key2' => 'this one it very long too, and exceeds 80 characters len…' 
); 

回答

1

如果您不能將值存儲在數據庫/文件中(根據adam/Peter),並且您絕對需要按照Zend Framework指南保留80/120字符限制,那麼即使在此案件。

作爲每: http://framework.zend.com/manual/en/coding-standard.coding-style.html

字符串連接(一層額外縮進)

$sql = "SELECT `id`, `name` FROM `people` " 
    . "WHERE `name` = 'Susan' " 
    . "ORDER BY `name` ASC "; 

關聯數組(一層額外縮進)

$sampleArray = array(
    'firstKey' => 'firstValue', 
    'secondKey' => 'secondValue', 
); 

上述兩種組合(二級額外的長字符串縮進)

protected $_messages = array(
    'key1' => 'very, very long string ' 
     . 'lorem ipsum dolor sit amet…', 
    'key2' => 'this one it very long too, ' 
     . 'and exceeds 80 characters len…' 
); 

編輯:
以上不工作(感謝&對不起takeshin) ,因爲PHP似乎不允許任何代碼/操作符在類屬性的初始值中。

的解決方案是連接在類的構造函數設置的初始值:

<?php 

class bar { 
    protected $_messages = Array(); 

    public function __construct() { 

     // manually initialize, or load from DB/XML/etc 
     $this->_messages[] = "very, very long string " 
      . "lorem ipsum dolor sit amet"; 

     $this->_messages[] = "this one it very long too, " 
      . "and exceeds 80 characters len"; 

     var_dump($this->_messages); 
    } 
} 

$foo = new bar(); 

?> 
+0

謝謝。我試圖用''連接。 '''正確的方法是''。''(奇怪?) – takeshin 2010-03-22 21:57:27

+0

@takeshin:不,你說得對。對不起,這是我的一個錯字(已經編輯過)。你可以連接「foo」,「bar」和「foo」,「bar」,你只需要使用相同的:o) – MicE 2010-03-22 22:21:29

+0

@MicE然後,這不能按預期工作。 – takeshin 2010-03-22 22:32:19

0

爲了代碼的可讀性,將變量限制在一定的長度是沒有意義的。你有什麼選擇?將它拆分成幾個變量並連接?毫無意義的額外工作(對你和php)

0

adam說什麼。如果你真的不想在你的代碼中出現長行,你可以將字符串放在一個平面文件或數據庫中,並在初始化時讀取它們。

2

個人而言,我喜歡偶爾長行 - 如果你關掉包裹在編輯器中它可以使事情更易讀。 「字符串」中的中斷。 「字符串」。 「串」;格式只是凌亂的IMO。

從本質上講,規則是有可能被打破的。使用任何可讀性最強的東西,而不是遵從別人的可讀性思想。

0

如果字符串reeeeeeealy長,你可以隨時使用$var = include('file.php');和文件中<?php return "loooooong string";

反正我認爲,規則是爲INTERACTIVE線。意味着你永遠應該早就喜歡這樣:

// dont use 
$_string = "this is a long " . $string . " which is generated by program code along with some parameters like: " . $parameter1 . " or " . $parameter2; 
// dont use 
$_string = "The apples are "($paramBool ? "" : $not) . " there. The amount of apples is " . ($paramInt > 3 ? $bigger : $smaller) . "than 3"; 
// you can use IMHO 
$_string = "this is a long string which is generated by program code along with some parameters like: width or height"; 

第一和第二不宜使用,因爲你可以很容易忽視的變量或迷失在括號中。另一方面,第三個裏面沒有變量,函數或任何其他邏輯,所以你很少有機會需要寫入它。而且你可以使用IDEs換行...只要其他「動態和交互」行保持在80以下。

但這只是我個人的偏好,「法律上」的答案是在MicE中帖子。

0

如果換行被允許可以使用Nowdoc

public $arr = array(
    <<<TEXT 
Some very 
long text 
TEXT 
, 
'key2' => <<<TEXT 
Some more very 
long text 
TEXT 
); 

但是很糟糕!

1

從PHP 5.4開始,這似乎不成問題。我有一些代碼可以處理5000個以上的字符串,並將它們作爲數組條目傳入,而不會在5.4中出現問題。但是,當由於服務器更改而遷移回5.3時,我遇到了無法用超長字符串定義數組的問題。

我的問題有些不同,也許這是有幫助的,也許不是。如果你的應用需要一個數組作爲它的數據庫參數,並且一個對象不會削減它,那麼你可能會把你的字符串作爲SQL語句的一部分,直到你可以使用5.4。

編輯:作爲一個補充說明,我們的服務器管理員將我們升級到5.4(和我的團隊的)請求,事實上,它確實糾正了將長字符串作爲數組元素的問題。