2012-03-08 79 views
-2

我有一個問題,創建一個調用父函數參數的函數。如何在另一個函數內重新聲明一個函數?

這裏是我的例子:

function firstfunction($param = null){ 

    function secondfunction(){ 

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

    } 

} 

它返回一個錯誤。請幫忙!

+0

您沒有這個問題。沒有理由在另一個內部聲明一個函數 – 2012-03-08 07:05:37

回答

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

如果我必須這樣做,可能會出現這種情況嗎?如果(!function_exists('second')){ function second(){ $ query = mysql_query('SELECT * FROM table_name WHERE table_id =''。first($ arg = null){ )。'「'); } } } first('23'); – leojarina 2012-03-08 07:17:45

+0

嗯,我不確定要理解你想做什麼,但是這可以讓你在一個函數中有一個函數並遞歸調用它。雖然,你甚至沒有從first()中調用second()...所以有什麼意義?小心無盡的循環。 – FMCorz 2012-03-08 07:48:38

相關問題