Проблема вставки параметров в функцию - PullRequest
2 голосов
/ 30 апреля 2010

Хорошо, я пытаюсь поместить параметры в функцию, которая вызывается так:

$parameters['function']($parameters['params']);

Вот функция и параметры, которые мне нужно поместить в это:

$parameters['function'] = 'test_error';
$parameters['params'] = array(0 => $txt['sometext'], 1 => 'critical', 2 => true);

Функция test_error принимает 3 параметра:

  1. Ошибка вывода
  2. Тип ошибки, отмеченной в строковом значении («общая», «критическая» и т. Д.).
  3. Должно ли это быть отражено или нет.

Вот вывод, который я получаю: Вот тестовая ошибка. ArraycriticalArray1

Я знаю, что эта функция прекрасно работает, но она дает мне только 1-й параметр, возвращаемый из нее. Что я делаю не так с $parameters['params'] ??

РЕДАКТИРОВАТЬ: Вот функция:

function test_error($type = 'error', $error_type = 'general', $echo = true)
{
    global $txt;

    // Build an array of all possible types.
    $valid_types = array(
        'not_installed' => $type == 'not_installed' ? 1 : 0,
        'not_allowed' => $type == 'not_allowed' ? 1 : 0,
        'no_language' => $type == 'no_language' ? 1 : 0,
        'query_error' => $type == 'query_error' ? 1 : 0,
        'empty' => $type == 'empty' ? 1 : 0,
        'error' => $type == 'error' ? 1 : 0,
    );

    $error_html = $error_type == 'critical' ? array('<p class="error">', '</p>') : array('', '');
    $error_string = !empty($valid_types[$type]) ? $txt['dp_module_' . $type] : $type;

    // Should it be echoed?
    if ($echo)
        echo implode($error_string, $error_html);

    // Don't need this anymore!
    unset($valid_types);
}

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Вы, вероятно, хотите call_user_func_array(). Каждый элемент массива, переданный в качестве второго аргумента, будет использоваться в качестве аргумента функции, например:

call_user_func_array( $parameters['function'], $parameters['params'] );
0 голосов
/ 30 апреля 2010

См. Ниже.

http://www.php.net/manual/en/function.call-user-func-array.php

<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}


// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));

// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...