2012-06-18 27 views
24
function parts($part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($tructure . $part . '.php'); 
} 

この関数はこのページの一番上に定義された変数$site_urlを使用しますが、この変数は関数に渡されません。PHP関数外部からの変数を使用

どのように関数に返すのですか?

答えて

51

あなたは、あなたの関数に追加のパラメータを渡す必要がある二番目のパラメータを追加:クロージャの場合

function parts($site_url, $part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

あなたはというし、クロージャを使用したい場合はすることができます変数を現在のスコープにインポートします(useキーワード):

$parts = function($part) use ($site_url) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

global - 悪い習慣

この投稿は頻繁に読むので、何かを約globalを明確にする必要があります。それを使用することは悪い習慣と考えられます(thisthisを参照)。ここで完全に期すため

globalを使用してソリューションです:

function parts($part) { 
    global $site_url; 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($structure . $part . '.php'); 
} 

あなたはグローバル変数を使用したいインタプリタを伝えるために持っているので、それは動作しますが、今でが、それは(内のローカル変数だと思っあなたの機能)。

候補]読書:ジャスト機能に入れ

0

:グローバルの$ SITE_URL。

34

また、useキーワードのクロージャを使用して、変数を外部スコープからインポートすることもできます。

$myVar = "foo"; 
$myFunction = function($arg1, $arg2) use ($myVar) 
{ 
return $arg1 . $myVar . $arg2; 
}; 
+1

このようにして少し難しくなります。たとえば、このように変数が10個ある場合は、難しくなります。 – M98

+1

PHPでエラーが表示される理由は何ですか?解析エラー:構文エラー、予期しない 'use'(T_USE)、 '{' – M98

+1

@ Kermaniが期待しているのは、 'use'構文を持たない古いバージョンのPHPを使用している可能性があります。この構文はPHP5.3で導入されました。 https://wiki.php.net/rfc/closures –

関連する問題