funzione My, preparare(), ha la definizione:Perché il passaggio di una variabile per riferimento non funziona quando si richiama un metodo riflettente?
funzione privata preparare (& $ dati, $ condizioni = null, $ conditionsRequired = false)
Quando ho provarlo, questo
/**
* @covers /data/DB_Service::prepare
* @uses /inc/config
*/
public function testNoExceptionIsRaisedForValidPrepareWithConditionsAndConditionsRequiredArguments() {
$method = new ReflectionMethod('DB_Service', 'prepare');
$method->setAccessible(TRUE);
$dbs = new DB_Service(new Config(), array('admin', 'etl'));
$data = array('message' => '', 'sql' => array('full_query' => ""));
$method->invoke($dbs, $data, array('conditionKey' => 'conditionValue'), TRUE);
}
rilanci (e rompe la mia prova)
ReflectionException: Invocazione del metodo di DB_Service :: preparare() non è riuscito
Tuttavia, questo
/**
* @covers /data/DB_Service::prepare
* @uses /inc/config
*/
public function testNoExceptionIsRaisedForValidPrepareWithConditionsAndConditionsRequiredArguments() {
$method = new ReflectionMethod('DB_Service', 'prepare');
$method->setAccessible(TRUE);
$dbs = new DB_Service(new Config(), array('admin', 'etl'));
//$data is no longer declared - the array is directly in the call below
$method->invoke($dbs, array('message' => '', 'sql' => array('full_query' => "")), array('conditionKey' => 'conditionValue'), TRUE);
}
funziona perfettamente e la prova è riuscita.
Perché la dichiarazione della variabile e quindi il passaggio non funzionano, ma semplicemente la sua creazione nella chiamata al metodo funziona? Penso che questo abbia qualcosa a che fare con come invoke() funziona, ma non riesco a capire cosa.
Per [questo post SO] (http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available), questo è deprecato in PHP5 e il suo utilizzo è scoraggiato. Nella definizione del metodo, passo l'argomento per riferimento, quindi farlo di nuovo nella chiamata non dovrebbe essere corretto. –
@MatthewHerbst Hai perfettamente ragione, mio errore. – wavemode
Ah, che invokeArgs è fantastico. Grazie! –