2

変数に大きな文字列を割り当てなければならないことがよくあります。ソース コードでは、行を 80 文字以内に収めたいと考えています。

理想的には、これらのリテラル文字列を複数行にレイアウトできるようにしたいと考えています。

避けたいのは、連結または関数呼び出し (例: preg_replace()) を使用して、複数の文字列を 1 つに結合することです。コードのスタイルを改善するために言語機能を呼び出さなければならないという考えは好きではありません。

私が欲しいものの例:

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

これにより、次のように出力されます。

Line1Line2Line3

これは可能ですか?

4

3 に答える 3

3

いくつかのオプションがあります:

  1. 連結するだけ(推奨)

  2. arrayコンストラクトを使用する

  3. 使用するsprintf()

連結するだけです:

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

ご覧のとおり、最初の 2 行とそれに続く最後の行を連結して文字列を作成します。結局~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'
);
于 2013-02-14T00:53:15.447 に答える
1
$text = 'Line1'.
        'Line2'.
        'Line3';

var_dump($text);

この方法では、コードが複数の行に分割されますが、データ自体は 1 行です。

于 2013-02-14T00:50:42.690 に答える
1

文字列を連結する方法はたくさんありますが、問題は文字列の長さやフォーマットではなく、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);
?>
于 2013-02-14T01:16:14.480 に答える