Portably referans PHP'nin ReflectionMethod :: invokeArgs argümanları geçen

1 Cevap php

Referansla geçiş PHP 5.3 önerilmiyor gibi bir yanlış isim görünüşte bir şey, ... neyse, ben ne çalışıyorum bir başvuru gerektiren bir yönteme argüman geçmesine izin verir yansıma kullanarak bir birim test çerçeve yazmaya. örneğin

class Bar {
    function TestMethod($arg1, &$result) {
        $result = 'hello';
        return true;
    }
}

$rc = new ReflectionMethod('Bar', 'TestMethod');
$return_val = $rc->invokeArgs($instance, $arguments);

Şimdi, ben sadece benim $ argümanlar diziye bir değişken başvurusu yapışmasını beni içine clued http://www.phwinfo.com/forum/comp-lang-php/273316-how-invoke-reflectionmethod-pass-variable-reference-asargument.html bir forum yazı bulundu:

$arguments = array('arg1', &$byref_result);

Bu çalışma, fakat bir 'onaysız: pass-by-reference onaylanmaz Çağrı-time' hatası veriyor. Bu kodu ileriye uyumlu olduğundan emin olmak istiyorum, bu yüzden PHP 6 tamamen kaldırmak eğer vidalı olmayacaktır. Açıkçası ben çünkü benim test çerçevesinde eksiklikler benim projede herhangi bir kodu yeniden yazmak zorunda tercih ediyorum. Herhangi bir fikir veya öneriniz? Teşekkürler! :)

P.S. Ben bunu yapabilirim görmek için phpunit belgelerine kadar vurmak için çalıştı ama site şu an için aşağı gibi görünüyor. Ben de sorunun kendisi hakkında merak ediyorum ama, çok hoş çözümler "tekerlek yeniden icat etmiyoruz" Herhangi bağlantıları.

1 Cevap

Bu kod ile herhangi bir sorun

class Bar {
    function test($arg1, &$result) {
        $result = 'hello';
    }
}

$arguments = array('', &$b);
$rc = new ReflectionMethod('Bar', 'test');
$rc->invokeArgs(new Bar, $arguments);
var_dump($b);

baskılar "merhaba", hiçbir uyarı

Eğer tam kodunu gönderebilir miyim?