Как переопределить функцию внутри другой функции? - PullRequest
0 голосов
/ 08 марта 2012

У меня проблема с созданием функции, которая вызывает родительскую функцию с параметром.

Вот мой пример:

function firstfunction($param = null){

   function secondfunction(){

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

   }

}

Возвращает ошибку. Пожалуйста, помогите!

Ответы [ 4 ]

2 голосов
/ 08 марта 2012

Вы не можете. Функции всегда существуют в глобальной области видимости, даже если они объявлены внутри другой функции.

1 голос
/ 08 марта 2012

Это будет работать.

function first($arg = null) {
    if (!function_exists('second')) {
        function second() {
            first();
        }
    }
    second();
}
1 голос
/ 08 марта 2012

Если вы используете php 5.4, вы можете попробовать анонимную функцию .

$first = function($param = null) {
    $second = function() {
        $query = mysql_query('...' . $first(1));
    }
}
1 голос
/ 08 марта 2012

У вас 2 проблемы с вашим кодом.

  1. У вас есть опечатка. В secondfunction вы делаете вызов fristfunciton, но ваша родительская функция на самом деле называется firstfunction.

  2. Дочерняя функция в родительской функции определяется, когда вызывается родительская функция, и обе функции имеют глобальную область видимости. Если вы вызываете родительскую функцию более одного раза (в вашем случае из дочерней функции), она попытается определить новую функцию с тем же именем. Вы не можете объявить 2 функции с одинаковыми именами в одной и той же области видимости, поэтому это не получится.

Подробнее о создании функций: http://www.php.net/manual/en/functions.user-defined.php

...