2013-02-20 12 views
16

PHPでコードフラグメントを角括弧で囲むことは可能ですか?PHPでコードを構造化するために中括弧を使用する

次のコードは、中括弧なしの場合と同じように動作しますか?あるいは、括弧の内側または外側にどのようなコードが使われているかによって問題はありますか?例えば

が、このう:はい

<?php 

// First Code-Block 
# several lines of code 

// Second Code-Block 
# another several lines of code 

?> 
+0

をあなたは意味、 '{(真)の場合のようなものなし... } '?どのような目的のために? – user113215

+0

私は実際には、セグメント/ステートメントが完了したら安全に収集できるコードの一部をラップすることによって、ガベージコレクションを管理する方法を実装しています。 – superhero

+0

コードの大部分があり、スクロールするとブロックを "崩壊させる"ことができるエディタを持っていると時間が経つにつれて面倒を見て、現在のコードに集中するのが簡単になると、本当に役に立ちます – My1

答えて

4

PHPコードの動作は、中括弧で囲むと変更されません。しかし、中括弧の中にいくつかのPHP文を使用することはできません:

  • namespace宣言;
  • namespace useエイリアスまたは任意の名前をインポートする宣言。
  • グローバルconst宣言;
  • __halt_compiler()

これは、次のスクリプトが動作することを意味:

<?php 
const x = 5; 
echo x; 

が、以下はコンパイルされません。

<?php 
{ 
    const x = 5; 
    echo x; 
} 
26

が、それは新しいローカルスコープを作成しません。

<?php 

// First Code-Block 
{# several lines of code 
} 

// Second Code-Block 
{# another several lines of code 
} 

?> 

常にこのように同じように動作します。これは通常行われることではありません。通常、人々はこのようなブロックにコメントを付けます。

更新:

これは、手動でそれへの参照を見つけるために掘るのビットを取ったが、ここでは、次のとおりです。

http://www.php.net/manual/en/control-structures.intro.php

任意のPHPスクリプトが出て構築されています一連のステートメントのステートメントは、代入、関数呼び出し、ループ、条件ステートメント、または何もしないステートメント(空文)でもかまいません。文は通常、セミコロンで終わります。さらに、ステートメントグループをステートメントグループにグループ化するには、中括弧でステートメントグループをカプセル化します。ステートメントグループは、ステートメント自体でもあります。この章では、さまざまなステートメントタイプについて説明します。

ここで重要なのは、文は、中括弧とステートメントのグループをカプセル化することによって、文のグループに分類することができるです。

それはこのような状況に関連して、私はまたvariable scopeへの参照のために見ていたが、マニュアルは、特に、しかし、あなたはこのように考えることができ、それを言及していない:

PHP、関数やクラスで可変スコープを作成します。そのことについてはhereを読むことができます。しかし、声明グループ(上記のとおり)はそうではありません。関数(またはクラス)ラッピングブラケットのようなステートメントグループの中括弧は考慮しないでください。制御構造のステートメントグループを囲む中括弧のように考えてください(ifforwhileswitchなど) - それはまさに彼らのものなのですから。中括弧は新しい範囲を導入しない文(または他の制御構造)を使用している場合、それらは単に文のブロックのラッパーにすぎないことは明らかです。

+1

うんこれを行うための単一の正当な理由があると考えてください。機能的に '{}'(制御構造や関数など)が必要な場合、それは愚かで紛らわしいようです。 – prodigitalson

+1

@ルークミル:ありがとう、私はこの情報をPHPのリファレンスでどこで見つけることができますか(私が質問する前に年齢を探していました)? – Albin

+2

@prodigitalson:理由:コメントブロック(*// *)と機能ブロック({})のみをコラプスするネイティブ設定(notepad ++)を持つコードエディタを使用する必要があります。 – Albin

0

これは私のテキストエディタ(Komodo Edit 8.5)のためだけです。それはあなたを助け、問題を引き起こさないし、それを行う他の簡単な方法がない場合、 "悪い理由"または "悪いコーディング"ではありません。

私は回避策で問題解決:最後に#を追加

if(1 == 1){ //always executing if function 
//whatever you want to add 
} 
# 

を波括弧の下にあるすべての空行を崩壊からの私のエディタを防ぎます。これは、コードをさらに構造化するのに役立ちます。1つのプロジェクトでは、私が働いている

4

、私は構造を示すために、ステートメントのグループを使用する - 私の場合には、ノード間の親/子関係は、ルータに作成されます。

$router = new Router(); 

$admin = $router->route('admin'); 
{ 
    $upload = $admin->route('upload')->post('upload'); 

    $menu = $admin->route('menu'); 
    { 
     $menu->route('load')->get('load'); 
     $menu->route('save')->get('save'); 
    } 
} 

`` `

は内部的には、これは次のような階層構造を構築する:この例でroute()を呼び出す

/admin 
    /upload 
    /menu 
    /load 
    /save 

子を作成する - これは、コード(ルータ内)モデルを作成します木構造を持っていますが、コードの構造には反映されていません。

中括弧とインデントせずにコードを読むことは非常に困難であるので、私は、コードをより読みやすくするためにここに中括弧を使用しています。この場合は

$router = new Router(); 

$admin = $router->route('admin'); 
$upload = $admin->route('upload')->post('upload'); 
$menu = $admin->route('menu'); 
$menu->route('load')->get('load'); 
$menu->route('save')->get('save'); 

インデントは本当に私が思うに、何が起こっているのかを明確に。

関連する問題