rATRIJS Posted December 10, 2009 Report Share Posted December 10, 2009 (edited) Tātad ko es vēlos panākt. Man vajag funkciju, kurai var padot neierobežotu skaitu parametru un viņa izmaina tieši tos parametrus, kurus es padodu. Nekas nav jāatgriež. Padot var gan stringus, gan masīvus ar stringiem. Ja padoti tiek masīvi, tad vienkārši katrs no masīva elementiem piedzīvo to pašu, ko ja tiktu padots strings. Problēma rodas kad es vēlos, lai izmainīti tiktu tieši padotie elementi. Atkal jau, protams, problēma ir atrisināta, bet es nēesmu drošs, ka tas ir labākais risinājums. Tā kā func_get_args() atgriež padoto parametru kopijas, tad viņa izmantošana man nav vajadzīga. Pēc nelielas pastudēšanas atklāju ka debug_backtrace() atgriež padotos parametrus pēc references un tas ir to ko man vajag. Lūk neliela vizualizācija: function test_ref() { $args = func_get_args(); foreach($args as $key => $value) { $args[$key] = "success"; } } function test_backtr() { $backtrace = debug_backtrace(); $args = &$backtrace[0]["args"]; foreach($args as $key => $value) { $args[$key] = "success"; } } $test = "fail"; test_ref($test); echo "Results 1: $test"; // fail test_ref(&$test); echo "Results 2: $test"; // fail test_backtr($test); echo "Results 3: $test"; // fail test_backtr(&$test); echo "Results 4: $test"; // success viss it kā ir jauki un skaisti, bet cik laba un droša ir debug_backtrace() izmantošana? Netiek ļoti tērēti servera resursi? Vai ir kāda alternatīva? Paldies. Edited December 10, 2009 by rATRIJS Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted December 10, 2009 Report Share Posted December 10, 2009 padot 'by reference' tā kā 4turtajā testā ir deprecated. bet ja tā nav problēma, tad var arī ar maģisko __call Quote Link to comment Share on other sites More sharing options...
gurkjis Posted December 10, 2009 Report Share Posted December 10, 2009 Man liekas, ka debug_backtrace tikai nolasa info no PHP iekšām un saliek tajā masīvā, ko atgriež, nekādus datu kalnus nepārvieto. Bet to var pārbaudīt, uztaisīt testa variantu ar un bez debug_backtrace, kur 10000x ciklā kaut kas tiek darīts izmērīt laiku (beigas mīnus sākums) un atmiņu ar memory_get_usage(). Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.