Jump to content
php.lv forumi

debug_backtrace izmantošana


rATRIJS

Recommended Posts

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 by rATRIJS
Link to comment
Share on other sites

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().

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...