2011-09-19 8 views
6

私はこれを行うにしてみてください。PHPでローカル関数を定義するには?

function a() 
{ 
    function b() { } 
} 

a(); 
a(); 

私はCannot redeclare b...を取得します。

function a() 
{ 
    if(!isset(b)) 
     function b() { } 
} 

a(); 
a(); 

私はunexpected), expected ...を得る:私はこれを実行しようとしました

この関数をローカルとして宣言して、aが返ってきたときに忘れることはできますか? array_filterに渡す機能が必要です。

+3

ネスティング機能が傷つくの世界を求めています。 –

+1

使用しているPHPのバージョンは? –

+0

@マークエリオット:これらのエラーを生成したバージョンは 'PHPバージョン5.3.2-1ubuntu4.2'ですが、これは' PHPバージョン5.3.6'で実行する必要があります – Dani

答えて

7

を必要としません。

+0

+1私は通常 'array_filter($ array、function($ x){...});'を使います。 –

3

PHPが持っているcreate_function関数を試すことができます。 http://php.net/create_function

$myfunc = create_function(..., ...); 
array_filter(..., $myfunc(...)); 
unset($myfunc); 

この方法は、あなたがあなたのarray_filter呼び出しでanonymous functionを使用することができますPHP 5.3+

5

は「地元の機能」の考え方も、 手がかりは、このページ、anonymous functionにいた...「関数内の関数」または「nested function」という名前@ceejayozと@Nexerus引用、しかし、のが説明させています!

  1. PHP には、関数宣言用のグローバルスコープのみが存在します。
  2. 唯一の代替は、別の種類の機能、匿名の1つを使用することです。

    1. 機能function a(){ function b() {} return b(); }b()もグローバルなので、宣言がfunction a(){ return b(); } function b() {}と同じ効果を有する:

    実施例により説明します。

    a()のスコープ内で関数b()のように宣言するには、b()ではなく、参照$b()を使用する以外は唯一の方法です。 「静的参照」を宣言するためにPHPには可能ではない、無名関数は決して静的次のようになります。構文はfunction a(){ $b = function() { }; return $b(); }

のようなものPSとなります。

も参照してください:

0

あなたは、PHP内のローカル関数を定義することができますが、一度だけ、それを宣言することができます。これは静的変数を定義して比較することで実現できます。

チェック次の例:関数がすでに存在しているかどうかをチェックすることにより、また

<?php 
function a() 
{ 
    static $init = true; 
    if ($init) { 
    function b() { } 
    $init = FALSE; 
    } 
} 

a(); 
a(); 

<?php 
function a() 
{ 
    if (!function_exists('b')) { 
    function b() { } 
    } 
} 

a(); 
a(); 
関連する問題