2012-03-08 17 views
-2

パラメータを持つ親関数を呼び出す関数を作成する際に問題があります。ここで別の関数の中で関数を再宣言する方法は?

は私の例です:

function firstfunction($param = null){ 

    function secondfunction(){ 

     $query = mysql_query('SELECT * FROM table_name WHERE table_id="' . fristfunciton(1) . '"'); 

    } 

} 

それはエラーを返します。助けてください!

+0

この問題はありません。他の関数を宣言する理由はありません –

答えて

2

できません。他の関数の中で宣言されていても、関数は常にグローバルスコープ内に存在します。

1

コードに2つの問題があります。

  1. あなたはタイプミスがあります。 secondfunctionではfristfuncitonに電話をかけますが、親機能の名前は実際にはfirstfunctionです。

  2. 親関数内の子関数は、親関数が呼び出され、両方の関数がグローバルスコープを持つときに定義されます。親関数を複数回(あなたの場合は子関数の内部から)呼び出すと、同じ名前の新しい関数を定義しようとします。同じスコープ内に同じ名前の2つの関数を宣言することはできません。したがって、これは失敗します。関数の作成について

さらに詳しい情報:http://www.php.net/manual/en/functions.user-defined.php

1

あなたは、PHP 5.4を使用している場合は、anonymous functionを試みることができます。

$first = function($param = null) { 
    $second = function() { 
     $query = mysql_query('...' . $first(1)); 
    } 
} 
1

これは機能します。

function first($arg = null) { 
    if (!function_exists('second')) { 
     function second() { 
      first(); 
     } 
    } 
    second(); 
} 
+0

これをこのようにしなければならない可能性はありますか? 機能最初($引数= NULL){ 場合(!function_exists( '秒')){ 機能秒(){ $クエリ=するmysql_query( 'TABLE_NAME FROMのtable_id =「SELECT *'。最初($引数) ''); } } } first('23 '); – leojarina

+0

さて、あなたがしたいことを理解しているかどうかはわかりませんが、これは関数内に関数を持ち、それを再帰的に呼び出すことを可能にします。しかし、あなたは最初から()を呼び出すことさえしていません...だからポイントは何ですか?無限ループにも注意してください。 – FMCorz

関連する問題