2011-12-30 15 views
0

私はexternal.phpは、すべての$ LANG配列を含むファイルPHP関数変数は

chewbacca() { 
    include('external.php'); 
    echo $lang[1]; 
    ... 
    } 

と呼ばれる機能を持っています。しかし、私は何千回も実行する必要があるので、ファイルを一度だけ含めたいと思います。私はinclude_once( 'external.php');関数の前に、関数ごとに$ lang配列変数を使用するにはどうしたらよいですか?

答えて

1

私があなたのことを誤解していない限り、それぞれの使用の前にglobalを書く必要はなく、機能の始めに使用するだけです。

ウェイ#2#1

global $lang; 
include('external.php') 
function chewbacca(){ 
    global $lang; 
    echo $lang[1]; 
} 

ウェイ:

include('external.php'); 

chewbacca() { 
    global $lang; 
    echo $lang[1]; 
    ... 
} 
2

多分それを引数として渡しますか?

<?php 

include 'external.php'; 

function chewbacca($lang_array){ 
    echo $lang_array[1]; 
    //... 
} 

編集:external.phpオン

:index.phpをオン

<?php 

return array(
    'foo', 
    'foobar', 
    'bar', 
); 

あなたも次の操作を行うことができ

<?php 

function chewbacca($lang_array){ 
    echo $lang_array[1]; 
    //... 
} 

$foo = include 'external.php'; 
chewbacca($foo); 

EDIT2: もちろん今度はinclude_onceを使用できますが、が失敗し、スクリプトがエラーで停止する必要がある場合は配列を持たないため、require_onceをお勧めします。

+1

私は私の認定エンジニアの証明書を持っています。以前は "$ foo = include(file)"を見たことがありませんでした。それは本当に機能しますか?私はインクルードが何も返さなかった言語構造であると思った... –

+0

毎日の学校の日:-) – cmbuckley

+0

@Paulああ、私はそれを読んだだけで、インクルードされたファイルの何かを返すと、現在の場所へのコード... nice one –

0

私が正しく理解していれば、それをローカルスコープに渡してから使用してください。そうすれば、関数内で一度グローバルスコープを使用するだけで済みます。

1

は、単にあなたが...

あなたがこれを行うには、いくつかの方法を持つことができない、と述べました

function chewbacca(){ 
    include('external.php') 
    echo $lang[1]; 
} 

ウェイ#3

function chewbacca(){ 
    static $lang; 
    if(!is_array($lang)){ include('external.php'); } 
    echo $lang[1]; 
} 

ウェイ#4

include('external.php') 
function chewbacca($lang){ 
    echo $lang[1]; 
} 
chewbacca($lang); 

幸運

PS:もう一つの方法は、クラスのロードに文字列をCLASSを使用することです(コンストラクタ内で)作成され、$ this-> langからの言語文字列にアクセスします。

1

静的クラスも解決策です。

class AppConfiguration { 
    static $languages = array(
     'en' => 'English' 
    ); 
} 

function functionName($param) { 
    $lang = AppConfiguration::$languages; 
} 

require_onceこのドキュメントのクラスはそれだけです。

+0

+1:それははるかに良い解決策です。 – cmbuckley