Guest User

Untitled

a guest
May 27th, 2014
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 19.53 KB | None | 0 0
  1. <?php
  2.  
  3. function bench_arr() {
  4.   $arr = [];
  5.   $keys = range('a', 'z');
  6.  
  7.   foreach (range('h', 't') as $key)
  8.     $arr[$key] = 1;
  9.  
  10.   foreach ($keys as $key)
  11.     if (empty ($arr[$key]))
  12.       $arr[$key] = 1;
  13.    
  14.   foreach ($arr as $key => $val);
  15. }
  16.  
  17. function bench_obj() {
  18.   $obj = new stdclass;
  19.   $keys = range('a', 'z');
  20.  
  21.   foreach (range('h', 't') as $key)
  22.     $obj->$key = 1;
  23.  
  24.   foreach ($keys as $key)
  25.     if (empty ($obj->$key))
  26.       $obj->$key = 1;
  27.    
  28.   foreach ($obj as $key => $val);
  29. }
  30.  
  31. function bench_obj_fix() {
  32.   $obj = new stdclass;
  33.  
  34.   $obj->h = 1;
  35.   $obj->i = 1;
  36.   $obj->j = 1;
  37.   $obj->k = 1;
  38.   $obj->l = 1;
  39.   $obj->m = 1;
  40.   $obj->n = 1;
  41.   $obj->o = 1;
  42.   $obj->p = 1;
  43.   $obj->q = 1;
  44.   $obj->r = 1;
  45.   $obj->s = 1;
  46.   $obj->t = 1;
  47.  
  48.   if (empty ($obj->a))
  49.     $obj->a = 1;
  50.   if (empty ($obj->b))
  51.     $obj->b = 1;
  52.   if (empty ($obj->c))
  53.     $obj->c = 1;
  54.   if (empty ($obj->d))
  55.     $obj->d = 1;
  56.   if (empty ($obj->e))
  57.     $obj->e = 1;
  58.   if (empty ($obj->f))
  59.     $obj->f = 1;
  60.   if (empty ($obj->g))
  61.     $obj->g = 1;
  62.   if (empty ($obj->h))
  63.     $obj->h = 1;
  64.   if (empty ($obj->i))
  65.     $obj->i = 1;
  66.   if (empty ($obj->j))
  67.     $obj->j = 1;
  68.   if (empty ($obj->k))
  69.     $obj->k = 1;
  70.   if (empty ($obj->l))
  71.     $obj->l = 1;
  72.   if (empty ($obj->m))
  73.     $obj->m = 1;
  74.   if (empty ($obj->n))
  75.     $obj->n = 1;
  76.   if (empty ($obj->o))
  77.     $obj->o = 1;
  78.   if (empty ($obj->p))
  79.     $obj->p = 1;
  80.   if (empty ($obj->q))
  81.     $obj->q = 1;
  82.   if (empty ($obj->r))
  83.     $obj->r = 1;
  84.   if (empty ($obj->s))
  85.     $obj->s = 1;
  86.   if (empty ($obj->t))
  87.     $obj->t = 1;
  88.   if (empty ($obj->u))
  89.     $obj->u = 1;
  90.   if (empty ($obj->v))
  91.     $obj->v = 1;
  92.   if (empty ($obj->w))
  93.     $obj->w = 1;
  94.   if (empty ($obj->y))
  95.     $obj->y = 1;
  96.   if (empty ($obj->x))
  97.     $obj->x = 1;
  98.   if (empty ($obj->z))
  99.     $obj->z = 1;
  100.    
  101.   foreach ($obj as $key => $val);
  102. }
  103.  
  104. function bench_wrp1() {
  105.   $wrp = new Wrapper1;
  106.   $keys = range('a', 'z');
  107.  
  108.   foreach (range('h', 't') as $key)
  109.     $wrp->$key = 1;
  110.  
  111.   foreach ($keys as $key)
  112.     if (empty ($wrp->$key))
  113.       $wrp->$key = 1;
  114.  
  115.   foreach ($wrp as $key => $val);
  116. }
  117.  
  118. function bench_wrp2() {
  119.   $wrp = new Wrapper2;
  120.   $keys = range('a', 'z');
  121.  
  122.   foreach (range('h', 't') as $key)
  123.     $wrp->$key = 1;
  124.  
  125.   foreach ($keys as $key)
  126.     if (empty ($wrp->$key))
  127.       $wrp->$key = 1;
  128.    
  129.   foreach ($wrp as $key => $val);
  130. }
  131.  
  132. function bench_wrp3() {
  133.   $wrp = new Wrapper3;
  134.   $keys = range('a', 'z');
  135.  
  136.   foreach (range('h', 't') as $key)
  137.     $wrp->$key = 1;
  138.  
  139.   foreach ($keys as $key)
  140.     if (empty ($wrp->$key))
  141.       $wrp->$key = 1;
  142.    
  143.   foreach ($wrp as $key => $val);
  144. }
  145.  
  146. function bench_wrp3_fix() {
  147.   $wrp = new Wrapper3;
  148.  
  149.   $wrp->h = 1;
  150.   $wrp->i = 1;
  151.   $wrp->j = 1;
  152.   $wrp->k = 1;
  153.   $wrp->l = 1;
  154.   $wrp->m = 1;
  155.   $wrp->n = 1;
  156.   $wrp->o = 1;
  157.   $wrp->p = 1;
  158.   $wrp->q = 1;
  159.   $wrp->r = 1;
  160.   $wrp->s = 1;
  161.   $wrp->t = 1;
  162.  
  163.   if (empty ($wrp->a))
  164.     $wrp->a = 1;
  165.   if (empty ($wrp->b))
  166.     $wrp->b = 1;
  167.   if (empty ($wrp->c))
  168.     $wrp->c = 1;
  169.   if (empty ($wrp->d))
  170.     $wrp->d = 1;
  171.   if (empty ($wrp->e))
  172.     $wrp->e = 1;
  173.   if (empty ($wrp->f))
  174.     $wrp->f = 1;
  175.   if (empty ($wrp->g))
  176.     $wrp->g = 1;
  177.   if (empty ($wrp->h))
  178.     $wrp->h = 1;
  179.   if (empty ($wrp->i))
  180.     $wrp->i = 1;
  181.   if (empty ($wrp->j))
  182.     $wrp->j = 1;
  183.   if (empty ($wrp->k))
  184.     $wrp->k = 1;
  185.   if (empty ($wrp->l))
  186.     $wrp->l = 1;
  187.   if (empty ($wrp->m))
  188.     $wrp->m = 1;
  189.   if (empty ($wrp->n))
  190.     $wrp->n = 1;
  191.   if (empty ($wrp->o))
  192.     $wrp->o = 1;
  193.   if (empty ($wrp->p))
  194.     $wrp->p = 1;
  195.   if (empty ($wrp->q))
  196.     $wrp->q = 1;
  197.   if (empty ($wrp->r))
  198.     $wrp->r = 1;
  199.   if (empty ($wrp->s))
  200.     $wrp->s = 1;
  201.   if (empty ($wrp->t))
  202.     $wrp->t = 1;
  203.   if (empty ($wrp->u))
  204.     $wrp->u = 1;
  205.   if (empty ($wrp->v))
  206.     $wrp->v = 1;
  207.   if (empty ($wrp->w))
  208.     $wrp->w = 1;
  209.   if (empty ($wrp->y))
  210.     $wrp->y = 1;
  211.   if (empty ($wrp->x))
  212.     $wrp->x = 1;
  213.   if (empty ($wrp->z))
  214.     $wrp->z = 1;
  215.    
  216.   foreach ($wrp as $key => $val);
  217. }
  218.  
  219. function bench_wrp4() {
  220.   $wrp = new Wrapper4;
  221.   $keys = range('a', 'z');
  222.  
  223.   foreach (range('h', 't') as $key)
  224.     $wrp->set($key, 1);
  225.  
  226.   foreach ($keys as $key)
  227.     if (!$wrp->has($key))
  228.       $wrp->set($key, 1);
  229.    
  230.   foreach ($wrp as $key => $val);
  231. }
  232.  
  233. /* ------------------------------------ */
  234.  
  235. function bench_arr_same() {
  236.   global $arr;
  237.   $keys = range('a', 'z');
  238.  
  239.   foreach (range('h', 't') as $key)
  240.     $arr[$key] = 1;
  241.  
  242.   foreach ($keys as $key)
  243.     if (empty ($arr[$key]))
  244.       $arr[$key] = 1;
  245.    
  246.   foreach ($arr as $key => $val);
  247. }
  248.  
  249. function bench_obj_same() {
  250.   global $obj_1;
  251.   $keys = range('a', 'z');
  252.  
  253.   foreach (range('h', 't') as $key)
  254.     $obj_1->$key = 1;
  255.  
  256.   foreach ($keys as $key)
  257.     if (empty ($obj_1->$key))
  258.       $obj_1->$key = 1;
  259.    
  260.   foreach ($obj_1 as $key => $val);
  261. }
  262.  
  263. function bench_obj_same_fix() {
  264.   global $obj_2;
  265.  
  266.   $obj_2->h = 1;
  267.   $obj_2->i = 1;
  268.   $obj_2->j = 1;
  269.   $obj_2->k = 1;
  270.   $obj_2->l = 1;
  271.   $obj_2->m = 1;
  272.   $obj_2->n = 1;
  273.   $obj_2->o = 1;
  274.   $obj_2->p = 1;
  275.   $obj_2->q = 1;
  276.   $obj_2->r = 1;
  277.   $obj_2->s = 1;
  278.   $obj_2->t = 1;
  279.  
  280.   if (empty ($obj_2->a))
  281.     $obj_2->a = 1;
  282.   if (empty ($obj_2->b))
  283.     $obj_2->b = 1;
  284.   if (empty ($obj_2->c))
  285.     $obj_2->c = 1;
  286.   if (empty ($obj_2->d))
  287.     $obj_2->d = 1;
  288.   if (empty ($obj_2->e))
  289.     $obj_2->e = 1;
  290.   if (empty ($obj_2->f))
  291.     $obj_2->f = 1;
  292.   if (empty ($obj_2->g))
  293.     $obj_2->g = 1;
  294.   if (empty ($obj_2->h))
  295.     $obj_2->h = 1;
  296.   if (empty ($obj_2->i))
  297.     $obj_2->i = 1;
  298.   if (empty ($obj_2->j))
  299.     $obj_2->j = 1;
  300.   if (empty ($obj_2->k))
  301.     $obj_2->k = 1;
  302.   if (empty ($obj_2->l))
  303.     $obj_2->l = 1;
  304.   if (empty ($obj_2->m))
  305.     $obj_2->m = 1;
  306.   if (empty ($obj_2->n))
  307.     $obj_2->n = 1;
  308.   if (empty ($obj_2->o))
  309.     $obj_2->o = 1;
  310.   if (empty ($obj_2->p))
  311.     $obj_2->p = 1;
  312.   if (empty ($obj_2->q))
  313.     $obj_2->q = 1;
  314.   if (empty ($obj_2->r))
  315.     $obj_2->r = 1;
  316.   if (empty ($obj_2->s))
  317.     $obj_2->s = 1;
  318.   if (empty ($obj_2->t))
  319.     $obj_2->t = 1;
  320.   if (empty ($obj_2->u))
  321.     $obj_2->u = 1;
  322.   if (empty ($obj_2->v))
  323.     $obj_2->v = 1;
  324.   if (empty ($obj_2->w))
  325.     $obj_2->w = 1;
  326.   if (empty ($obj_2->y))
  327.     $obj_2->y = 1;
  328.   if (empty ($obj_2->x))
  329.     $obj_2->x = 1;
  330.   if (empty ($obj_2->z))
  331.     $obj_2->z = 1;
  332.    
  333.   foreach ($obj_2 as $key => $val);
  334. }
  335.  
  336. function bench_wrp1_same() {
  337.   global $wrp1;
  338.   $keys = range('a', 'z');
  339.  
  340.   foreach (range('h', 't') as $key)
  341.     $wrp1->$key = 1;
  342.  
  343.   foreach ($keys as $key)
  344.     if (empty ($wrp1->$key))
  345.       $wrp1->$key = 1;
  346.  
  347.   foreach ($wrp1 as $key => $val);
  348. }
  349.  
  350. function bench_wrp2_same() {
  351.   global $wrp2;
  352.   $keys = range('a', 'z');
  353.  
  354.   foreach (range('h', 't') as $key)
  355.     $wrp2->$key = 1;
  356.  
  357.   foreach ($keys as $key)
  358.     if (empty ($wrp2->$key))
  359.       $wrp2->$key = 1;
  360.    
  361.   foreach ($wrp2 as $key => $val);
  362. }
  363.  
  364. function bench_wrp3_same() {
  365.   global $wrp3_1;
  366.   $keys = range('a', 'z');
  367.  
  368.   foreach (range('h', 't') as $key)
  369.     $wrp3_1->$key = 1;
  370.  
  371.   foreach ($keys as $key)
  372.     if (empty ($wrp3_1->$key))
  373.       $wrp3_1->$key = 1;
  374.  
  375.   foreach ($wrp3_1 as $key => $val);
  376. }
  377.  
  378. function bench_wrp3_same_fix() {
  379.   global $wrp3_2;
  380.  
  381.   $wrp3_2->h = 1;
  382.   $wrp3_2->i = 1;
  383.   $wrp3_2->j = 1;
  384.   $wrp3_2->k = 1;
  385.   $wrp3_2->l = 1;
  386.   $wrp3_2->m = 1;
  387.   $wrp3_2->n = 1;
  388.   $wrp3_2->o = 1;
  389.   $wrp3_2->p = 1;
  390.   $wrp3_2->q = 1;
  391.   $wrp3_2->r = 1;
  392.   $wrp3_2->s = 1;
  393.   $wrp3_2->t = 1;
  394.  
  395.   if (empty ($wrp3_2->a))
  396.     $wrp3_2->a = 1;
  397.   if (empty ($wrp3_2->b))
  398.     $wrp3_2->b = 1;
  399.   if (empty ($wrp3_2->c))
  400.     $wrp3_2->c = 1;
  401.   if (empty ($wrp3_2->d))
  402.     $wrp3_2->d = 1;
  403.   if (empty ($wrp3_2->e))
  404.     $wrp3_2->e = 1;
  405.   if (empty ($wrp3_2->f))
  406.     $wrp3_2->f = 1;
  407.   if (empty ($wrp3_2->g))
  408.     $wrp3_2->g = 1;
  409.   if (empty ($wrp3_2->h))
  410.     $wrp3_2->h = 1;
  411.   if (empty ($wrp3_2->i))
  412.     $wrp3_2->i = 1;
  413.   if (empty ($wrp3_2->j))
  414.     $wrp3_2->j = 1;
  415.   if (empty ($wrp3_2->k))
  416.     $wrp3_2->k = 1;
  417.   if (empty ($wrp3_2->l))
  418.     $wrp3_2->l = 1;
  419.   if (empty ($wrp3_2->m))
  420.     $wrp3_2->m = 1;
  421.   if (empty ($wrp3_2->n))
  422.     $wrp3_2->n = 1;
  423.   if (empty ($wrp3_2->o))
  424.     $wrp3_2->o = 1;
  425.   if (empty ($wrp3_2->p))
  426.     $wrp3_2->p = 1;
  427.   if (empty ($wrp3_2->q))
  428.     $wrp3_2->q = 1;
  429.   if (empty ($wrp3_2->r))
  430.     $wrp3_2->r = 1;
  431.   if (empty ($wrp3_2->s))
  432.     $wrp3_2->s = 1;
  433.   if (empty ($wrp3_2->t))
  434.     $wrp3_2->t = 1;
  435.   if (empty ($wrp3_2->u))
  436.     $wrp3_2->u = 1;
  437.   if (empty ($wrp3_2->v))
  438.     $wrp3_2->v = 1;
  439.   if (empty ($wrp3_2->w))
  440.     $wrp3_2->w = 1;
  441.   if (empty ($wrp3_2->y))
  442.     $wrp3_2->y = 1;
  443.   if (empty ($wrp3_2->x))
  444.     $wrp3_2->x = 1;
  445.   if (empty ($wrp3_2->z))
  446.     $wrp3_2->z = 1;
  447.    
  448.   foreach ($wrp3_2 as $key => $val);
  449. }
  450.  
  451. function bench_wrp4_same() {
  452.   global $wrp4;
  453.   $keys = range('a', 'z');
  454.  
  455.   foreach (range('h', 't') as $key)
  456.     $wrp4->set($key, 1);
  457.  
  458.   foreach ($keys as $key)
  459.     if (!$wrp4->has($key))
  460.       $wrp4->set($key, 1);
  461.    
  462.   foreach ($wrp4 as $key => $val);
  463. }
  464.  
  465. /* ------------------------------------ */
  466.  
  467. function bench_arr_arg(array $arr) {
  468.   $keys = range('a', 'z');
  469.  
  470.   foreach (range('h', 't') as $key)
  471.     $arr[$key] = 1;
  472.  
  473.   foreach ($keys as $key)
  474.     if (empty ($arr[$key]))
  475.       $arr[$key] = 1;
  476.    
  477.   foreach ($arr as $key => $val);
  478. }
  479.  
  480. function bench_arr_ref(array &$arr) {
  481.   $keys = range('a', 'z');
  482.  
  483.   foreach (range('h', 't') as $key)
  484.     $arr[$key] = 1;
  485.  
  486.   foreach ($keys as $key)
  487.     if (empty ($arr[$key]))
  488.       $arr[$key] = 1;
  489.    
  490.   foreach ($arr as $key => $val);
  491. }
  492.  
  493. function bench_obj_ref(stdclass $obj) {
  494.   $keys = range('a', 'z');
  495.  
  496.   foreach (range('h', 't') as $key)
  497.     $obj->$key = 1;
  498.  
  499.   foreach ($keys as $key)
  500.     if (empty ($obj->$key))
  501.       $obj->$key = 1;
  502.  
  503.   foreach ($obj as $key => $val);
  504. }
  505.  
  506. function bench_obj_ref_fix(stdclass $obj) {
  507.   $obj->h = 1;
  508.   $obj->i = 1;
  509.   $obj->j = 1;
  510.   $obj->k = 1;
  511.   $obj->l = 1;
  512.   $obj->m = 1;
  513.   $obj->n = 1;
  514.   $obj->o = 1;
  515.   $obj->p = 1;
  516.   $obj->q = 1;
  517.   $obj->r = 1;
  518.   $obj->s = 1;
  519.   $obj->t = 1;
  520.  
  521.   if (empty ($obj->a))
  522.     $obj->a = 1;
  523.   if (empty ($obj->b))
  524.     $obj->b = 1;
  525.   if (empty ($obj->c))
  526.     $obj->c = 1;
  527.   if (empty ($obj->d))
  528.     $obj->d = 1;
  529.   if (empty ($obj->e))
  530.     $obj->e = 1;
  531.   if (empty ($obj->f))
  532.     $obj->f = 1;
  533.   if (empty ($obj->g))
  534.     $obj->g = 1;
  535.   if (empty ($obj->h))
  536.     $obj->h = 1;
  537.   if (empty ($obj->i))
  538.     $obj->i = 1;
  539.   if (empty ($obj->j))
  540.     $obj->j = 1;
  541.   if (empty ($obj->k))
  542.     $obj->k = 1;
  543.   if (empty ($obj->l))
  544.     $obj->l = 1;
  545.   if (empty ($obj->m))
  546.     $obj->m = 1;
  547.   if (empty ($obj->n))
  548.     $obj->n = 1;
  549.   if (empty ($obj->o))
  550.     $obj->o = 1;
  551.   if (empty ($obj->p))
  552.     $obj->p = 1;
  553.   if (empty ($obj->q))
  554.     $obj->q = 1;
  555.   if (empty ($obj->r))
  556.     $obj->r = 1;
  557.   if (empty ($obj->s))
  558.     $obj->s = 1;
  559.   if (empty ($obj->t))
  560.     $obj->t = 1;
  561.   if (empty ($obj->u))
  562.     $obj->u = 1;
  563.   if (empty ($obj->v))
  564.     $obj->v = 1;
  565.   if (empty ($obj->w))
  566.     $obj->w = 1;
  567.   if (empty ($obj->y))
  568.     $obj->y = 1;
  569.   if (empty ($obj->x))
  570.     $obj->x = 1;
  571.   if (empty ($obj->z))
  572.     $obj->z = 1;
  573.    
  574.   foreach ($obj as $key => $val);
  575. }
  576.  
  577. function bench_wrp1_ref(Wrapper1 $wrp1) {
  578.   $keys = range('a', 'z');
  579.  
  580.   foreach (range('h', 't') as $key)
  581.     $wrp1->$key = 1;
  582.  
  583.   foreach ($keys as $key)
  584.     if (empty ($wrp1->$key))
  585.       $wrp1->$key = 1;
  586.    
  587.   foreach ($wrp1 as $key => $val);
  588. }
  589.  
  590. function bench_wrp2_ref(Wrapper2 $wrp2) {
  591.   $keys = range('a', 'z');
  592.  
  593.   foreach (range('h', 't') as $key)
  594.     $wrp2->$key = 1;
  595.  
  596.   foreach ($keys as $key)
  597.     if (empty ($wrp2->$key))
  598.       $wrp2->$key = 1;
  599.    
  600.   foreach ($wrp2 as $key => $val);
  601. }
  602.  
  603. function bench_wrp3_ref(Wrapper3 $wrp3) {
  604.   $keys = range('a', 'z');
  605.  
  606.   foreach (range('h', 't') as $key)
  607.     $wrp3->$key = 1;
  608.  
  609.   foreach ($keys as $key)
  610.     if (empty ($wrp3->$key))
  611.       $wrp3->$key = 1;
  612.  
  613.   foreach ($wrp3 as $key => $val);
  614. }
  615.  
  616. function bench_wrp3_ref_fix(Wrapper3 $wrp3) {
  617.   $wrp3->h = 1;
  618.   $wrp3->i = 1;
  619.   $wrp3->j = 1;
  620.   $wrp3->k = 1;
  621.   $wrp3->l = 1;
  622.   $wrp3->m = 1;
  623.   $wrp3->n = 1;
  624.   $wrp3->o = 1;
  625.   $wrp3->p = 1;
  626.   $wrp3->q = 1;
  627.   $wrp3->r = 1;
  628.   $wrp3->s = 1;
  629.   $wrp3->t = 1;
  630.  
  631.   if (empty ($wrp3->a))
  632.     $wrp3->a = 1;
  633.   if (empty ($wrp3->b))
  634.     $wrp3->b = 1;
  635.   if (empty ($wrp3->c))
  636.     $wrp3->c = 1;
  637.   if (empty ($wrp3->d))
  638.     $wrp3->d = 1;
  639.   if (empty ($wrp3->e))
  640.     $wrp3->e = 1;
  641.   if (empty ($wrp3->f))
  642.     $wrp3->f = 1;
  643.   if (empty ($wrp3->g))
  644.     $wrp3->g = 1;
  645.   if (empty ($wrp3->h))
  646.     $wrp3->h = 1;
  647.   if (empty ($wrp3->i))
  648.     $wrp3->i = 1;
  649.   if (empty ($wrp3->j))
  650.     $wrp3->j = 1;
  651.   if (empty ($wrp3->k))
  652.     $wrp3->k = 1;
  653.   if (empty ($wrp3->l))
  654.     $wrp3->l = 1;
  655.   if (empty ($wrp3->m))
  656.     $wrp3->m = 1;
  657.   if (empty ($wrp3->n))
  658.     $wrp3->n = 1;
  659.   if (empty ($wrp3->o))
  660.     $wrp3->o = 1;
  661.   if (empty ($wrp3->p))
  662.     $wrp3->p = 1;
  663.   if (empty ($wrp3->q))
  664.     $wrp3->q = 1;
  665.   if (empty ($wrp3->r))
  666.     $wrp3->r = 1;
  667.   if (empty ($wrp3->s))
  668.     $wrp3->s = 1;
  669.   if (empty ($wrp3->t))
  670.     $wrp3->t = 1;
  671.   if (empty ($wrp3->u))
  672.     $wrp3->u = 1;
  673.   if (empty ($wrp3->v))
  674.     $wrp3->v = 1;
  675.   if (empty ($wrp3->w))
  676.     $wrp3->w = 1;
  677.   if (empty ($wrp3->y))
  678.     $wrp3->y = 1;
  679.   if (empty ($wrp3->x))
  680.     $wrp3->x = 1;
  681.   if (empty ($wrp3->z))
  682.     $wrp3->z = 1;
  683.    
  684.   foreach ($wrp3 as $key => $val);
  685. }
  686.  
  687. function bench_wrp4_ref(Wrapper4 $wrp4) {
  688.   $keys = range('a', 'z');
  689.  
  690.   foreach (range('h', 't') as $key)
  691.     $wrp4->set($key, 1);
  692.  
  693.   foreach ($keys as $key)
  694.     if (!$wrp4->has($key))
  695.       $wrp4->set($key, 1);
  696.    
  697.   foreach ($wrp4 as $key => $val);
  698. }
  699.  
  700. /* ------------------------------------ */
  701.  
  702. function bench_new_arr_arg() {
  703.   $arr = [];
  704.   bench_arr_arg($arr);
  705. }
  706.  
  707. function bench_new_arr_ref() {
  708.   $arr = [];
  709.   bench_arr_ref($arr);
  710. }
  711.  
  712. function bench_new_obj_ref() {
  713.   $obj = new stdclass;
  714.   bench_obj_ref($obj);
  715. }
  716.  
  717. function bench_new_obj_ref_fix() {
  718.   $obj = new stdclass;
  719.   bench_obj_ref_fix($obj);
  720. }
  721.  
  722. function bench_new_wrp1_ref() {
  723.   $wrp = new Wrapper1;
  724.   bench_wrp1_ref($wrp);
  725. }
  726.  
  727. function bench_new_wrp2_ref() {
  728.   $wrp = new Wrapper2;
  729.   bench_wrp2_ref($wrp);
  730. }
  731.  
  732. function bench_new_wrp3_ref() {
  733.   $wrp = new Wrapper3;
  734.   bench_wrp3_ref($wrp);
  735. }
  736.  
  737. function bench_new_wrp3_ref_fix() {
  738.   $wrp = new Wrapper3;
  739.   bench_wrp3_ref_fix($wrp);
  740. }
  741.  
  742. function bench_new_wrp4_ref() {
  743.   $wrp = new Wrapper4;
  744.   bench_wrp4_ref($wrp);
  745. }
  746.  
  747. /* ------------------------------------ */
  748.  
  749. function bench($func) {
  750.   $t = [];
  751.  
  752.   for ($i = 0; $i < 100; ++$i) {
  753.     $s = microtime(true);
  754.     for ($o = 0; $o < 1000; ++$o)
  755.       $func();
  756.     $t[] = microtime(true) - $s;
  757.   }
  758.  
  759.   $r = 0;
  760.  
  761.   foreach ($t as $b)
  762.     $r += $b;
  763.  
  764.   return $r / 100;
  765. }
  766.  
  767. function bench_arg($func, $ref) {
  768.   $t = [];
  769.  
  770.   for ($i = 0; $i < 100; ++$i) {
  771.     $s = microtime(true);
  772.     for ($o = 0; $o < 1000; ++$o)
  773.       $func($ref);
  774.     $t[] = microtime(true) - $s;
  775.   }
  776.  
  777.   $r = 0;
  778.  
  779.   foreach ($t as $b)
  780.     $r += $b;
  781.  
  782.   return $r / 100;
  783. }
  784.  
  785. function bench_ref($func, &$ref) {
  786.   $t = [];
  787.  
  788.   for ($i = 0; $i < 100; ++$i) {
  789.     $s = microtime(true);
  790.     for ($o = 0; $o < 1000; ++$o)
  791.       $func($ref);
  792.     $t[] = microtime(true) - $s;
  793.   }
  794.  
  795.   $r = 0;
  796.  
  797.   foreach ($t as $b)
  798.     $r += $b;
  799.  
  800.   return $r / 100;
  801. }
  802.  
  803. /* ------------------------------------ */
  804.  
  805. class Wrapper1 implements IteratorAggregate {
  806.   private $mem = [];
  807.  
  808.   function __get($key) {
  809.     return $this->mem[$key];
  810.   }
  811.  
  812.   function __set($key, $val) {
  813.     $this->mem[$key] = $val;
  814.   }
  815.  
  816.   function __isset($key) {
  817.     return isset ($this->mem[$key]);
  818.   }
  819.  
  820.   public function getIterator() {
  821.     return new ArrayIterator($this->mem);
  822.   }
  823. }
  824.  
  825. class Wrapper2 {
  826.   function __get($key) {
  827.     return null;
  828.   }
  829.  
  830.   function __set($key, $val) {
  831.     $this->$key = $val;
  832.   }
  833.  
  834.   function __isset($key) {
  835.     return false;
  836.   }
  837. }
  838.  
  839. class Wrapper3 {
  840.   public $a=0, $b=0, $c=0, $d=0, $e=0, $f=0, $g=0;
  841.   public $h=0, $i=0, $j=0, $k=0, $l=0, $m=0, $n=0;
  842.   public $o=0, $p=0, $q=0, $r=0, $s=0, $t=0, $u=0;
  843.   public $v=0, $w=0, $x=0, $y=0, $z=0;
  844. }
  845.  
  846. class Wrapper4 {
  847.   public $a=0, $b=0, $c=0, $d=0, $e=0, $f=0, $g=0;
  848.   public $h=0, $i=0, $j=0, $k=0, $l=0, $m=0, $n=0;
  849.   public $o=0, $p=0, $q=0, $r=0, $s=0, $t=0, $u=0;
  850.   public $v=0, $w=0, $x=0, $y=0, $z=0;
  851.  
  852.   public function set($k, $v) {
  853.     $this->$k = $v;
  854.   }
  855.  
  856.   public function get($k) {
  857.     return $this->$k;
  858.   }
  859.  
  860.   public function has($k) {
  861.     return !empty ($this->$k);
  862.   }
  863. }
  864.  
  865. /* ------------------------------------ */
  866.  
  867. $arr = [];
  868. $obj_1 = new stdclass;
  869. $obj_2 = new stdclass;
  870. $wrp1 = new Wrapper1;
  871. $wrp2 = new Wrapper2;
  872. $wrp3_1 = new Wrapper3;
  873. $wrp3_2 = new Wrapper3;
  874. $wrp4 = new Wrapper4;
  875.  
  876. $arr_2_1 = [];
  877. $arr_2_2 = [];
  878. $obj_2_1 = new stdclass;
  879. $obj_2_2 = new stdclass;
  880. $wrp1_2 = new Wrapper1;
  881. $wrp2_2 = new Wrapper2;
  882. $wrp3_2_1 = new Wrapper3;
  883. $wrp3_2_2 = new Wrapper3;
  884. $wrp4_2 = new Wrapper4;
  885.  
  886. echo "array vs. object benchmark\n";
  887.  
  888. echo "\nusing a new value for all calls\n";
  889. echo 'array:           ', bench('bench_arr'), 's', "\n";
  890. echo 'object:          ', bench('bench_obj'), 's', "\n";
  891. echo 'object (fix):    ', bench('bench_obj_fix'), 's', "\n";
  892. echo 'wrapper 1:       ', bench('bench_wrp1'), 's', "\n";
  893. echo 'wrapper 2:       ', bench('bench_wrp2'), 's', "\n";
  894. echo 'wrapper 3:       ', bench('bench_wrp3'), 's', "\n";
  895. echo 'wrapper 3 (fix): ', bench('bench_wrp3_fix'), 's', "\n";
  896. echo 'wrapper 4:       ', bench('bench_wrp4'), 's', "\n";
  897.  
  898. echo "\nusing a new created reference as argument for all calls\n";
  899. echo 'array-ref:       ', bench('bench_new_arr_ref'), 's', "\n";
  900. echo 'array-arg:       ', bench('bench_new_arr_arg'), 's', "\n";
  901. echo 'object   :       ', bench('bench_new_obj_ref'), 's', "\n";
  902. echo 'object (fix):    ', bench('bench_new_obj_ref_fix'), 's', "\n";
  903. echo 'wrapper 1:       ', bench('bench_new_wrp1_ref'), 's', "\n";
  904. echo 'wrapper 2:       ', bench('bench_new_wrp2_ref'), 's', "\n";
  905. echo 'wrapper 3:       ', bench('bench_new_wrp3_ref'), 's', "\n";
  906. echo 'wrapper 3 (fix): ', bench('bench_new_wrp3_ref_fix'), 's', "\n";
  907. echo 'wrapper 4:       ', bench('bench_new_wrp4_ref'), 's', "\n";
  908.  
  909. echo "\nusing the same reference as argument for all calls\n";
  910. echo 'array-ref:       ', bench_ref('bench_arr_ref', $arr_2_1), 's', "\n";
  911. echo 'array-arg:       ', bench_arg('bench_arr_arg', $arr_2_2), 's', "\n";
  912. echo 'object:          ', bench_ref('bench_obj_ref', $obj_2_1), 's', "\n";
  913. echo 'object (fix):    ', bench_ref('bench_obj_ref_fix', $obj_2_2), 's', "\n";
  914. echo 'wrapper 1:       ', bench_ref('bench_wrp1_ref', $wrp1_2), 's', "\n";
  915. echo 'wrapper 2:       ', bench_ref('bench_wrp2_ref', $wrp2_2), 's', "\n";
  916. echo 'wrapper 3:       ', bench_ref('bench_wrp3_ref', $wrp3_2_1), 's', "\n";
  917. echo 'wrapper 3 (fix): ', bench_ref('bench_wrp3_ref_fix', $wrp3_2_2), 's', "\n";
  918. echo 'wrapper 4:       ', bench_ref('bench_wrp4_ref', $wrp4_2), 's', "\n";
  919.  
  920. echo "\nusing the same reference for all calls (global)\n";
  921. echo 'array:           ', bench('bench_arr_same'), 's', "\n";
  922. echo 'object:          ', bench('bench_obj_same'), 's', "\n";
  923. echo 'object (fix):    ', bench('bench_obj_same_fix'), 's', "\n";
  924. echo 'wrapper 1:       ', bench('bench_wrp1_same'), 's', "\n";
  925. echo 'wrapper 2:       ', bench('bench_wrp2_same'), 's', "\n";
  926. echo 'wrapper 3:       ', bench('bench_wrp3_same'), 's', "\n";
  927. echo 'wrapper 3 (fix): ', bench('bench_wrp3_same_fix'), 's', "\n";
  928. echo 'wrapper 4:       ', bench('bench_wrp4_same'), 's', "\n";
Advertisement
Add Comment
Please, Sign In to add comment