2010-04-30 7 views
2

Ok, j'essaie de placer les paramètres dans une fonction qui est appelée comme ceci:problème insérer les paramètres dans une fonction

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

est la fonction ici et les paramètres que je dois être placé dans ce:

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

La fonction test_error prend 3 paramètres:

  1. L'erreur de sortie
  2. Le type d'erreur noté dans une valeur de chaîne («général», «critique», etc.).
  3. Indique s'il doit être répercuté ou non.

Voici la sortie que je reçois: est ici un error.ArraycriticalArray1 test

Je sais que cette fonction fonctionne parfaitement, mais il me donne seulement le 1er paramètre retourné de celui-ci. Qu'est-ce que je fais mal ici avec le $parameters['params'] ??

EDIT: Voici la fonction:

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); 
} 
+0

est nécessaire – silent

+0

Il Je l'ai modifié avec la fonction maintenant. – SoLoGHoST

Répondre

2

Vous voulez probablement call_user_func_array(). Chaque élément du tableau passé en tant que second argument sera utilisé en tant qu'argument de fonction, par exemple:

call_user_func_array($parameters['function'], $parameters['params']); 
+0

hmmm, donc il n'y a aucun moyen d'utiliser cette approche '$ parameters ['function'] ($ parameters ['params']);' ?? Le truc, c'est que j'appellerais la fonction avec cette approche, parce qu'elle le fait déjà bien pour les non-erreurs, donc je préfère ne pas avoir à le changer, car ce serait beaucoup plus de travail. – SoLoGHoST

+0

Vous devez faire '$ parameters ['function'] ($ paramètres ['params'] [0], $ paramètres ['params'] [1], $ paramètres ['params'] [2]);' ou modifiez la fonction. –

+0

Y at-il un moyen de définir '$ parameters ['params'] =" tous les paramètres ici ";' ??? Ferais ce travail? Si oui, comment exactement devrait-il être fait tout en utilisant la même fonction de configuration. – SoLoGHoST

0

Voir ci-dessous.

code de fonction 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")); 
?> 
Questions connexes