1--TEST--
2Test array_key_exists() function : usage variations - Pass different data types as $key arg
3--FILE--
4<?php
5/*
6 * Pass different data types as $key argument to array_key_exists() to test behaviour
7 */
8
9echo "*** Testing array_key_exists() : usage variations ***\n";
10
11// Initialise function arguments not being substituted
12$search = array ('zero', 'key' => 'val', 'two', 10 => 'value');
13
14//get an unset variable
15$unset_var = 10;
16unset ($unset_var);
17
18// get a class
19class classA
20{
21  public function __toString() {
22    return "key";
23  }
24}
25
26// heredoc string
27$heredoc = <<<EOT
28key
29EOT;
30
31// get a resource variable
32$fp = fopen(__FILE__, "r");
33
34// unexpected values to be passed to $key argument
35$inputs = array(
36
37       // int data
38/*1*/  0,
39       1,
40       12345,
41       -2345,
42
43       // null data
44/*10*/ NULL,
45       null,
46
47       // boolean data
48/*12*/ true,
49       false,
50       TRUE,
51       FALSE,
52
53       // empty data
54/*16*/ "",
55       '',
56       array(),
57
58       // string data
59/*19*/ "key",
60       'key',
61       $heredoc,
62
63       // object data
64/*22*/ new classA(),
65
66       // undefined data
67/*23*/ @$undefined_var,
68
69       // unset data
70/*24*/ @$unset_var,
71
72       // resource variable
73/*25*/ $fp
74);
75
76// loop through each element of $inputs to check the behavior of array_key_exists()
77$iterator = 1;
78foreach($inputs as $input) {
79  echo "\n-- Iteration $iterator --\n";
80  try {
81      var_dump( array_key_exists($input, $search) );
82  } catch (TypeError $exception) {
83      echo $exception->getMessage() . "\n";
84  }
85  $iterator++;
86};
87
88fclose($fp);
89
90echo "Done";
91?>
92--EXPECTF--
93*** Testing array_key_exists() : usage variations ***
94
95-- Iteration 1 --
96bool(true)
97
98-- Iteration 2 --
99bool(true)
100
101-- Iteration 3 --
102bool(false)
103
104-- Iteration 4 --
105bool(false)
106
107-- Iteration 5 --
108bool(false)
109
110-- Iteration 6 --
111bool(false)
112
113-- Iteration 7 --
114bool(true)
115
116-- Iteration 8 --
117bool(true)
118
119-- Iteration 9 --
120bool(true)
121
122-- Iteration 10 --
123bool(true)
124
125-- Iteration 11 --
126bool(false)
127
128-- Iteration 12 --
129bool(false)
130
131-- Iteration 13 --
132Illegal offset type
133
134-- Iteration 14 --
135bool(true)
136
137-- Iteration 15 --
138bool(true)
139
140-- Iteration 16 --
141bool(true)
142
143-- Iteration 17 --
144Illegal offset type
145
146-- Iteration 18 --
147bool(false)
148
149-- Iteration 19 --
150bool(false)
151
152-- Iteration 20 --
153
154Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
155bool(false)
156Done
157