PageRenderTime 44ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/slow/apc_objects.php

http://github.com/facebook/hiphop-php
PHP | 167 lines | 139 code | 24 blank | 4 comment | 0 complexity | 1fe76babee9c40369d76b307ca9033bc MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?hh
  2. class C {
  3. public $x = 3;
  4. public $f = 'hi';
  5. }
  6. class B {
  7. public $f;
  8. }
  9. function apcOps($key, $val) {
  10. apc_store($key, $val);
  11. // need to fetch the value twice because under common
  12. // config settings object are serialized on first store
  13. // and APCObject (APCCollection) are created on second
  14. // fetch
  15. var_dump(__hhvm_intrinsics\apc_fetch_no_check($key));
  16. var_dump(__hhvm_intrinsics\apc_fetch_no_check($key));
  17. }
  18. <<__EntryPoint>>
  19. function main_apc_objects() {
  20. $s = strtolower('heLLo');
  21. echo "**** Object instance with simple properties\n";
  22. $o = new C;
  23. apcOps('key', $o);
  24. echo "**** Vector containing object reference\n";
  25. $c = Vector{1, 2, $o};
  26. apcOps('key', $c);
  27. echo "modify previous instance from APC\n";
  28. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  29. $apcObj[] = 'hi';
  30. $apcObj[0] = 100;
  31. $opcObj = null;
  32. var_dump('MUTATED', $apcObj);
  33. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  34. echo "**** Vector containing non-refcounted values\n";
  35. $c = Vector{1, 'hello'};
  36. apcOps('key', $c);
  37. echo "modify previous instance from APC\n";
  38. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  39. $apcObj[] = 'hi';
  40. $apcObj[0] = 100;
  41. $opcObj = null;
  42. var_dump('MUTATED', $apcObj);
  43. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  44. echo "**** Vector containing simple values\n";
  45. $c = Vector{true, $s};
  46. apcOps('key', $c);
  47. echo "modify previous instance from APC\n";
  48. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  49. $apcObj[] = 'hi';
  50. $apcObj[0] = 100;
  51. $opcObj = null;
  52. var_dump('MUTATED', $apcObj);
  53. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  54. echo "**** Map containing non-refcounted values\n";
  55. $m = Map{'a' => 'b', 'c' => 'd'};
  56. apcOps('key', $m);
  57. echo "modify previous instance from APC\n";
  58. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  59. $apcObj['one'] = 'hi';
  60. $apcObj['a'] = 100;
  61. $opcObj = null;
  62. var_dump('MUTATED', $apcObj);
  63. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  64. echo "**** Map containing itself\n";
  65. $m = Map{'a' => 'b', 'c' => $m};
  66. apcOps('key', $m);
  67. echo "modify previous instance from APC\n";
  68. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  69. $apcObj['one'] = 'hi';
  70. $apcObj['a'] = 100;
  71. $opcObj = null;
  72. var_dump('MUTATED', $apcObj);
  73. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  74. echo "**** Map containing a vector\n";
  75. $m = Map{'a' => 'b', 'c' => $c};
  76. apcOps('key', $m);
  77. echo "modify previous instance from APC\n";
  78. $apcObj = __hhvm_intrinsics\apc_fetch_no_check('key');
  79. $apcObj['one'] = 'hi';
  80. $apcObj['a'] = 100;
  81. $opcObj = null;
  82. var_dump('MUTATED', $apcObj);
  83. var_dump(__hhvm_intrinsics\apc_fetch_no_check('key'));
  84. echo "**** Immutable Vector instance\n";
  85. $c = ImmVector{1, 'hello'};
  86. apcOps('key', $c);
  87. echo "**** Immutable Map instance\n";
  88. $m = ImmMap{'a' => 'b', 'c' => 'd'};
  89. apcOps('key', $m);
  90. echo "**** Object instance containg itself\n";
  91. $o = new C;
  92. $o->x = $o;
  93. apcOps('key', $o);
  94. echo "**** Object instance containg itself 2\n";
  95. $o = new C;
  96. $o->x = new B;
  97. $o->x->f = $o;
  98. apcOps('key', $o);
  99. echo "**** Object instance containg itself 3\n";
  100. $o = new C;
  101. $o->x = new B;
  102. $o->x->f = Vector{};
  103. $o->x->f[] = $o;
  104. apcOps('key', $o);
  105. echo "**** Object instance containg itself 4\n";
  106. $o = new C;
  107. $o->x = new B;
  108. $o->x->f = Vector{};
  109. $o->x->f[] = $o->x;
  110. apcOps('key', $o);
  111. echo "**** Object instance containg itself 5\n";
  112. $o = new C;
  113. $o->x = new B;
  114. $o->x->f = Vector{};
  115. $o->x->f[] = new B;
  116. apcOps('key', $o);
  117. echo "**** Object instance containg Vector instace with simple values\n";
  118. $o = new C;
  119. $o->x = new B;
  120. $o->x->f = Vector{};
  121. $o->x->f[] = 10;
  122. $o->x->f[] = 'hi';
  123. $o->x->f[] = strtolower('heLLo');
  124. apcOps('key', $o);
  125. echo "**** Object instance containg collections instaces\n";
  126. $o = new C;
  127. $o->x = new B;
  128. $o->x->f = Map{};
  129. $o->x->f['k'] = 10;
  130. $o->x->f['k1'] = 'hi';
  131. $o->x->f['k2'] = Vector{};
  132. $o->x->f['k2'][] = 100;
  133. $o->x->f['k2'][] = 'hello';
  134. apcOps('key', $o);
  135. echo "**** Set instance\n";
  136. $s = Set{ 1, 'hi', 4, $s};
  137. apcOps('key', $s);
  138. echo "**** Set instance with int-like strings\n";
  139. $s = Set{ 123, '123'};
  140. apcOps('key', $s);
  141. echo "**** Make sure delete is ok\n";
  142. apc_delete('key');
  143. }