fork download
  1. <?php
  2.  
  3. // zryty system typów
  4. var_dump(08 === 0); // true
  5.  
  6. $arr[5.40] = 'something';
  7. var_dump($arr[5.90] === $arr[5.40]); // true
  8. var_dump($arr[5.30] === 'something'); // true
  9.  
  10. class Foo { public function __toString() { /* to i tak nic nie da */ return 'x'; } }
  11. $foo = new Foo();
  12. $arr2 = array();
  13. $arr2[$foo] = 123; // tak po prostu rzuci warning, żadnego błędu kompilacji :O
  14. var_dump(count($arr2) === 0); // w rzeczywistości żadna zmiana na tablicy nie zaszła :O
  15.  
  16. // koercja o której nie wie 99% programistów PHP i jest zrobiona najgłupiej jak się dało
  17. $id = '1<script>alert(/xss/.source);</script>';
  18.  
  19. if (in_array($id, [1, 2, 3])) { // true
  20. echo "Twój ID to: " . $id . "\n";
  21. }
  22.  
  23. // kolejne przykłady
  24. var_dump(min('foo', 0)); // 'foo'
  25. var_dump(min(0, 'foo')); // 0
  26. var_dump((int)'foo' === 0); // true
  27. var_dump((bool)'foo' === true); // true
  28. var_dump((int)(bool)'foo' === 1); // true
  29.  
  30. // zajebista niekonsystencja API
  31. class X implements ArrayAccess {
  32. function offsetGet($key) {return 'foo';}
  33. function offsetSet($key, $value) {/* just make this class immutable */}
  34. function offsetExists($key) {return $key === 'something';}
  35. function offsetUnset($key) {/* just make this class immutable */}
  36. }
  37.  
  38. $x = new X();
  39.  
  40. var_dump(isset($x['something'])); // true
  41. var_dump(!empty($x['something'])); // true
  42. var_dump($x['something']); // 'foo'
  43. var_dump(array_key_exists('something', $x)); // false(!), ale warninga nie rzuciło
  44. var_dump(array_merge($x, [1, 2, 3])); // NULL(!), tutaj już dla odmiany rzuciło warning: array_merge(): Argument #1 is not an array
  45.  
  46. // i na dobry koniec
  47. $fun = function() {
  48. return function() {
  49. return 'abc123';
  50. };
  51. };
  52.  
  53. // sensownej opcji nie ma, jest tylko taka:
  54. $wynik = $fun();
  55. echo $wynik();
  56.  
  57. // jak to odkomentujesz to będzie parse error:
  58. // echo $fun()();
  59. // w normalnych językach działa OK
Success #stdin #stdout #stderr 0.02s 24448KB
stdin
Standard input is empty
stdout
bool(true)
bool(true)
bool(true)
bool(true)
Twój ID to: 1<script>alert(/xss/.source);</script>
string(3) "foo"
int(0)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
string(3) "foo"
bool(false)
NULL
abc123
stderr
PHP Warning:  Illegal offset type in /home/TJSjfl/prog.php on line 13
PHP Warning:  array_merge(): Argument #1 is not an array in /home/TJSjfl/prog.php on line 44