2010-07-27 8 views
1

OK est si il y a une manière en php faire appel aux fonctions piste telles queinstances de la fonction de suivi

function Tracker($name,$returnedValue,$file,$line) 
{ 
    echo $name . '() was called and returned a ' . typeof(returnedValue); 
} 

function test(){} 

test(); 

La raison est d'envoyer un données-cadre sur mesure de type retour donc un autre exemple serait

$resource = fopen('php://stdin'); //This would return an instance of (Object)Resource. 

if($resource->type == 'fopen') 
{ 
    //Code 
} 

Je n'ai jamais vu ça de toute façon mais est-ce que quelqu'un sait si c'est possible?

Répondre

2

Il est impossible de le faire en utilisant simplement PHP, un débogueur peut aider, mais vous pouvez envelopper la fonction:

function wrapper() 
{ 
    $args=func_get_args(); 
    $function=array_shift($args); 
    $returned=call_user_func_array($function, $args); 
    print "$function (" . var_export($args, true) . ") = " 
     . var_export($returned, true) . "\n"; 
    return $returned; 
} 

$value=wrapper('test_fn', 1 ,2 ,3, 'something'); 
$value=wrapper('mysql_connect'); 

Je ne comprends pas votre explication de ce que vous essayez d'atteindre ici .

C.

+0

hmmm, possible 'new Resource ('fopen', 'php: // stdin', true);' bonne idée, malade J'essaie de faire quoi que ce soit: – RobertPitt

+0

Ce que j'essaie de faire, c'est d'ajouter un objet de type data aux types de données ordinaires, donc au lieu de '$ variable =" string ";' je ferais '$ variable = new String ("string contents") 'et puis la variable aurait des méthodes telles que section pour obtenir une partie de la chaîne, trim et scape etc cela serait utilisé pour les chaînes, les tableaux, stdclass'es, ressources, etc. et la raison pour laquelle je vouloir suivre les appels de fonction est donc je ne dois pas utiliser des wrappers pour les fonctions qui créent des types de données tels que Fopen, et Fr ead, où Fread retournerait un objet String. – RobertPitt

1

Pas vraiment. Xdebug est capable d'enregistrer les appels de fonction si: http://xdebug.org/docs/execution_trace

+0

Ce ne est pas vous connecter, je veux être en mesure de retourner un type de données personnalisé à partir de php, donc si j'ai appelé 'trim()' en général il retournerait une chaîne de caractères, où que je veux revenir objet personnalisé tel que 'String'. – RobertPitt

+0

@RobertPitt: Eh bien, ce n'est pas possible. Vous devrez modifier le noyau PHP si vous souhaitez le faire. –

+0

Oui j'ai eu le sentiment qu'il aurait recours à cela :(mais comme il s'agit d'un projet public je ne peux pas demander aux utilisateurs de modifier trop core, et j'ai une carte de lecture très stricte dans mon esprit :(vaut la peine d'essayer je suppose. – RobertPitt