2015-12-03 9 views
16

Quando devo scrivere un riferimento a una funzione callable uso la sintassi standard di PHP defined as:Come codificare/riferimento a un PHP funzioni richiamabili facile da gestire per il mio IDE

una funzione PHP è passato con il suo nome come una stringa. È possibile utilizzare qualsiasi funzione incorporata o definita dall'utente [... omessa ...].

Un metodo di un oggetto istanziato viene passato come un vettore contenente un oggetto di indice 0 e il nome metodo(alias stringa) dall'indice 1.

metodi di classe statici possono anche essere trasmessi senza istanza di un oggetto di quella classe passando il nome classe(ancora una stringa) invece di un oggetto all'indice 0.

dal PHP 5.2.3, è anche possibile passare (la stringa)'ClassName :: methodName'.

Oltre alla funzione definita dall'utente comune, le funzioni anonime possono anche essere passate a un parametro di richiamata.

Tutte queste vie non sono le "IDE friendly" per le operazioni come il nome funzione refactoring o utilizzo ritrovamento di.

Nella mia risposta propongo una soluzione, ma ci sono altri approcci che possono essere applicati, anche totalmente diversi, che permettono all'IDE di "trovare" l'invocazione dei metodi?

risposta

10

sei già vicino alla cosa più breve si può fare

È possibile chiamare perfettamente la funzione anonima direttamente nella vostra chiamata di funzione senza utilizzare un variabile

Ad esempio, è possibile sostituire:

$callable=function($param) use ($object){ 
    return $object->myMethod($param); 
} 
call_user_func($callable, $param); 

da:

call_user_func(function($param) use ($object){ 
    return $object->myMethod($param); 
}, $param); 

Si dovrà attendere per arrow functions nelle future versioni di PHP, e si dovrebbe essere in grado di usare qualcosa come:

call_user_func(fn($a) => $object->myMethod($a), $param); 
+0

funzione freccia risolverà il problema alla radice! –

2

ho diventato a una soluzione, sempre in base alla anonymous-functions che risolve il problema, ma mi lasci non pieno soddisfatti:

metodo statico di una classe

$callable = function($param){ 
    return \my\namespace\myClass::myMethod($param); 
} 

metodo di un oggetto

$callable = function($param) use ($object){ 
    return $object->myMethod($param); 
} 

metodo $ questo oggetto

$callable = function($param){ 
    return self::myMethod($param); 
} 

Alternative per le versioni di PHP più antichi

All'interno del tutto classess chiamerete (o in loro genitori) definiscono la funzione nome di classe() come Segue:

public static function className() 
{ 
    return get_called_class(); 
} 

o per ve ry vecchio PHP:

public static function className() 
{ 
    return "MyClass"; 
} 

Poi

call_user_func(array(MyClass::className(), 'myCallbackMethod')); 
Problemi correlati