функция php как параметр функции - PullRequest
1 голос
/ 14 ноября 2011

Рассмотрим следующее объявление функции для проверки текущего языка на двуязычном веб-сайте:

function checkNewsLanguage(){
    $requiredURL = $_SERVER['REQUEST_URI'];
    $myLanguage = explode('?lang=',$requiredURL);
    if($myLanguage=='en')
        return false;
    else return true;
}

Затем я получаю несколько объектов XML на нужном языке, используя такие функции, как:

function item1('checkNewsLanguage')
    if(checkNewsLanguage()){
        $urlD = "someurl1";
        $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeed1.xml',3600));
        $itemD = '';
        if($xmlD === FALSE)
            {$itemD = '';}
        else
            {$itemD = $xmlD->channel->item;}
    }
    else {
        $urlD = "someurl2";
        $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeed2.xml',3600));
        $itemD = '';
        if($xmlD === FALSE)
            {$itemD = '';}
        else
            {$itemD = $xmlD->channel->item;}
    }
    return $itemD;
    }
function item2('checkNewsLanguage')
//Analogic procedure

Я получаю "Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting '&' or T_VARIABLE ". Как видите, вызовы функций в item1 () и item2 () не верны. Любая помощь кода приветствуется.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Аргументы вашей функции должны быть переменной, а не просто строкой (как предполагает ошибка). Ваши функции должны быть определены как:

function item1($variableHere), а не function item2('string here').

Когда я снова смотрю на ваш код, кажется, что вы пытаетесь сделать, это вызвать определенную функцию, основанную на параметрах item1() и item2() (поэтому, если вы передаете item1(foo), вы хотите вызвать foo() функция.

Попробуйте:

function item1($function)
{
    if ($function()) 
    { 
        ...
    }
}

и аналогичные для item2(). Таким образом, вы можете вызвать item1('checkNewsLanguage'), и эта функция будет вызываться внутри тела.

1 голос
/ 14 ноября 2011

Проблема на линии:

function item1('checkNewsLanguage')

У вас не может быть 'checkNewsLanguage' в парантезе. Вам нужна переменная, которая принимает аргумент функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...