1--TEST--
2Test gettype() & settype() functions : usage variations
3--SKIPIF--
4<?php
5if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
6?>
7--INI--
8precision=14
9--FILE--
10<?php
11/* Test usage variation of gettype() and settype() functions:
12         settype() to string type.
13   Set type of the data to "string" and verify using gettype
14   Following are performed in the listed sequence:
15     get the current type of the variable
16     set the type of the variable to string type
17     dump the variable to see its new data
18     get the new type of the variable
19*/
20
21/* function to handle catchable errors */
22function foo($errno, $errstr, $errfile, $errline) {
23//	var_dump($errstr);
24   // print error no and error string
25   echo "$errno: $errstr\n";
26}
27//set the error handler, this is required as
28// settype() would fail with catachable fatal error
29set_error_handler("foo");
30
31$var1 = "another string";
32$var2 = array(2,3,4);
33
34class point
35{
36  var $x;
37  var $y;
38
39  function __construct($x, $y) {
40     $this->x = $x;
41     $this->y = $y;
42  }
43
44  function __toString() {
45     return "ObjectPoint";
46  }
47}
48
49$var_values = array (
50  /* nulls */
51  null,
52
53  /* boolean */
54  FALSE,
55  TRUE,
56  true,
57
58  /* strings */
59  "\xFF",
60  "\x66",
61  "\0123",
62  "",
63  '',
64  " ",
65  ' ',
66  /* numerics in the form of string */
67  '10',
68  "10",
69  "10string",
70  '10string',
71  "1",
72  "-1",
73  "1e2",
74  " 1",
75  "2974394749328742328432",
76  "-1e-2",
77  '1',
78  '-1',
79  '1e2',
80  ' 1',
81  '2974394749328742328432',
82  '-1e-2',
83  "0xff",
84  '0x55',
85  '0XA55',
86  '0X123',
87  "0123",
88  '0123',
89  "-0123",
90  "+0123",
91  '-0123',
92  '+0123',
93  "-0x80001", // invalid numerics as its prefix with sign or have decimal points
94  "+0x80001",
95  "-0x80001.5",
96  "0x80001.5",
97  "@$%#$%^$%^&^",
98
99  /* arrays */
100  array(),
101  array(NULL),
102  array(1,2,3,4),
103  array(1 => "one", 2 => "two", "3" => "three", "four" => 4),
104  array(1.5, 2.4, 6.5e6),
105
106  /* integers */
107  -2147483648, // max -ne int value
108  2147483647,
109  2147483649,
110  1232147483649,
111  0x55,
112  0xF674593039, // a hex value > than max int
113  -0X558F,
114  0555,
115  -0555,
116  02224242434343152, // an octal value > than max int
117
118  /* floats */
119  1e5,
120  -1e5,
121  1E5,
122  -1E5,
123  -1.5,
124  .5,
125  -.5,
126  .5e6,
127  -.5e6,
128  -.5e-6,
129  .5e+6,
130  -.5e+6,
131  .512E6,
132  -.512E6,
133  .512E-6,
134  +.512E-6,
135  .512E+6,
136  -.512E+6,
137
138  new point(NULL, NULL),
139  new point(2.5, 40.5),
140  new point(0, 0),
141);
142
143/* test conversion to string type */
144$type = "string";
145
146echo "\n*** Testing gettype() & settype() functions : usage variations ***\n";
147echo "\n-- Setting type of data to $type --\n";
148$loop_count = 1;
149foreach ($var_values as $var) {
150  echo "-- Iteration $loop_count --\n"; $loop_count++;
151
152  // get the current data type
153  var_dump( gettype($var) );
154
155  // convert it to null
156  var_dump( settype($var, $type) );
157
158  // dump the converted data
159  var_dump( $var );
160
161  // check the new type after conversion
162  var_dump( gettype($var) );
163}
164
165echo "Done\n";
166?>
167--EXPECTF--
168*** Testing gettype() & settype() functions : usage variations ***
169
170-- Setting type of data to string --
171-- Iteration 1 --
172string(4) "NULL"
173bool(true)
174string(0) ""
175string(6) "string"
176-- Iteration 2 --
177string(7) "boolean"
178bool(true)
179string(0) ""
180string(6) "string"
181-- Iteration 3 --
182string(7) "boolean"
183bool(true)
184string(1) "1"
185string(6) "string"
186-- Iteration 4 --
187string(7) "boolean"
188bool(true)
189string(1) "1"
190string(6) "string"
191-- Iteration 5 --
192string(6) "string"
193bool(true)
194string(1) "�"
195string(6) "string"
196-- Iteration 6 --
197string(6) "string"
198bool(true)
199string(1) "f"
200string(6) "string"
201-- Iteration 7 --
202string(6) "string"
203bool(true)
204string(2) "
2053"
206string(6) "string"
207-- Iteration 8 --
208string(6) "string"
209bool(true)
210string(0) ""
211string(6) "string"
212-- Iteration 9 --
213string(6) "string"
214bool(true)
215string(0) ""
216string(6) "string"
217-- Iteration 10 --
218string(6) "string"
219bool(true)
220string(1) " "
221string(6) "string"
222-- Iteration 11 --
223string(6) "string"
224bool(true)
225string(1) " "
226string(6) "string"
227-- Iteration 12 --
228string(6) "string"
229bool(true)
230string(2) "10"
231string(6) "string"
232-- Iteration 13 --
233string(6) "string"
234bool(true)
235string(2) "10"
236string(6) "string"
237-- Iteration 14 --
238string(6) "string"
239bool(true)
240string(8) "10string"
241string(6) "string"
242-- Iteration 15 --
243string(6) "string"
244bool(true)
245string(8) "10string"
246string(6) "string"
247-- Iteration 16 --
248string(6) "string"
249bool(true)
250string(1) "1"
251string(6) "string"
252-- Iteration 17 --
253string(6) "string"
254bool(true)
255string(2) "-1"
256string(6) "string"
257-- Iteration 18 --
258string(6) "string"
259bool(true)
260string(3) "1e2"
261string(6) "string"
262-- Iteration 19 --
263string(6) "string"
264bool(true)
265string(2) " 1"
266string(6) "string"
267-- Iteration 20 --
268string(6) "string"
269bool(true)
270string(22) "2974394749328742328432"
271string(6) "string"
272-- Iteration 21 --
273string(6) "string"
274bool(true)
275string(5) "-1e-2"
276string(6) "string"
277-- Iteration 22 --
278string(6) "string"
279bool(true)
280string(1) "1"
281string(6) "string"
282-- Iteration 23 --
283string(6) "string"
284bool(true)
285string(2) "-1"
286string(6) "string"
287-- Iteration 24 --
288string(6) "string"
289bool(true)
290string(3) "1e2"
291string(6) "string"
292-- Iteration 25 --
293string(6) "string"
294bool(true)
295string(2) " 1"
296string(6) "string"
297-- Iteration 26 --
298string(6) "string"
299bool(true)
300string(22) "2974394749328742328432"
301string(6) "string"
302-- Iteration 27 --
303string(6) "string"
304bool(true)
305string(5) "-1e-2"
306string(6) "string"
307-- Iteration 28 --
308string(6) "string"
309bool(true)
310string(4) "0xff"
311string(6) "string"
312-- Iteration 29 --
313string(6) "string"
314bool(true)
315string(4) "0x55"
316string(6) "string"
317-- Iteration 30 --
318string(6) "string"
319bool(true)
320string(5) "0XA55"
321string(6) "string"
322-- Iteration 31 --
323string(6) "string"
324bool(true)
325string(5) "0X123"
326string(6) "string"
327-- Iteration 32 --
328string(6) "string"
329bool(true)
330string(4) "0123"
331string(6) "string"
332-- Iteration 33 --
333string(6) "string"
334bool(true)
335string(4) "0123"
336string(6) "string"
337-- Iteration 34 --
338string(6) "string"
339bool(true)
340string(5) "-0123"
341string(6) "string"
342-- Iteration 35 --
343string(6) "string"
344bool(true)
345string(5) "+0123"
346string(6) "string"
347-- Iteration 36 --
348string(6) "string"
349bool(true)
350string(5) "-0123"
351string(6) "string"
352-- Iteration 37 --
353string(6) "string"
354bool(true)
355string(5) "+0123"
356string(6) "string"
357-- Iteration 38 --
358string(6) "string"
359bool(true)
360string(8) "-0x80001"
361string(6) "string"
362-- Iteration 39 --
363string(6) "string"
364bool(true)
365string(8) "+0x80001"
366string(6) "string"
367-- Iteration 40 --
368string(6) "string"
369bool(true)
370string(10) "-0x80001.5"
371string(6) "string"
372-- Iteration 41 --
373string(6) "string"
374bool(true)
375string(9) "0x80001.5"
376string(6) "string"
377-- Iteration 42 --
378string(6) "string"
379bool(true)
380string(12) "@$%#$%^$%^&^"
381string(6) "string"
382-- Iteration 43 --
383string(5) "array"
3842: Array to string conversion
385bool(true)
386string(5) "Array"
387string(6) "string"
388-- Iteration 44 --
389string(5) "array"
3902: Array to string conversion
391bool(true)
392string(5) "Array"
393string(6) "string"
394-- Iteration 45 --
395string(5) "array"
3962: Array to string conversion
397bool(true)
398string(5) "Array"
399string(6) "string"
400-- Iteration 46 --
401string(5) "array"
4022: Array to string conversion
403bool(true)
404string(5) "Array"
405string(6) "string"
406-- Iteration 47 --
407string(5) "array"
4082: Array to string conversion
409bool(true)
410string(5) "Array"
411string(6) "string"
412-- Iteration 48 --
413string(6) "double"
414bool(true)
415string(11) "-2147483648"
416string(6) "string"
417-- Iteration 49 --
418string(7) "integer"
419bool(true)
420string(10) "2147483647"
421string(6) "string"
422-- Iteration 50 --
423string(6) "double"
424bool(true)
425string(10) "2147483649"
426string(6) "string"
427-- Iteration 51 --
428string(6) "double"
429bool(true)
430string(13) "1232147483649"
431string(6) "string"
432-- Iteration 52 --
433string(7) "integer"
434bool(true)
435string(2) "85"
436string(6) "string"
437-- Iteration 53 --
438string(6) "double"
439bool(true)
440string(13) "1058513956921"
441string(6) "string"
442-- Iteration 54 --
443string(7) "integer"
444bool(true)
445string(6) "-21903"
446string(6) "string"
447-- Iteration 55 --
448string(7) "integer"
449bool(true)
450string(3) "365"
451string(6) "string"
452-- Iteration 56 --
453string(7) "integer"
454bool(true)
455string(4) "-365"
456string(6) "string"
457-- Iteration 57 --
458string(6) "double"
459bool(true)
460string(14) "80561044571754"
461string(6) "string"
462-- Iteration 58 --
463string(6) "double"
464bool(true)
465string(6) "100000"
466string(6) "string"
467-- Iteration 59 --
468string(6) "double"
469bool(true)
470string(7) "-100000"
471string(6) "string"
472-- Iteration 60 --
473string(6) "double"
474bool(true)
475string(6) "100000"
476string(6) "string"
477-- Iteration 61 --
478string(6) "double"
479bool(true)
480string(7) "-100000"
481string(6) "string"
482-- Iteration 62 --
483string(6) "double"
484bool(true)
485string(4) "-1.5"
486string(6) "string"
487-- Iteration 63 --
488string(6) "double"
489bool(true)
490string(3) "0.5"
491string(6) "string"
492-- Iteration 64 --
493string(6) "double"
494bool(true)
495string(4) "-0.5"
496string(6) "string"
497-- Iteration 65 --
498string(6) "double"
499bool(true)
500string(6) "500000"
501string(6) "string"
502-- Iteration 66 --
503string(6) "double"
504bool(true)
505string(7) "-500000"
506string(6) "string"
507-- Iteration 67 --
508string(6) "double"
509bool(true)
510string(7) "-5.0E-7"
511string(6) "string"
512-- Iteration 68 --
513string(6) "double"
514bool(true)
515string(6) "500000"
516string(6) "string"
517-- Iteration 69 --
518string(6) "double"
519bool(true)
520string(7) "-500000"
521string(6) "string"
522-- Iteration 70 --
523string(6) "double"
524bool(true)
525string(6) "512000"
526string(6) "string"
527-- Iteration 71 --
528string(6) "double"
529bool(true)
530string(7) "-512000"
531string(6) "string"
532-- Iteration 72 --
533string(6) "double"
534bool(true)
535string(7) "5.12E-7"
536string(6) "string"
537-- Iteration 73 --
538string(6) "double"
539bool(true)
540string(7) "5.12E-7"
541string(6) "string"
542-- Iteration 74 --
543string(6) "double"
544bool(true)
545string(6) "512000"
546string(6) "string"
547-- Iteration 75 --
548string(6) "double"
549bool(true)
550string(7) "-512000"
551string(6) "string"
552-- Iteration 76 --
553string(6) "object"
554bool(true)
555string(11) "ObjectPoint"
556string(6) "string"
557-- Iteration 77 --
558string(6) "object"
559bool(true)
560string(11) "ObjectPoint"
561string(6) "string"
562-- Iteration 78 --
563string(6) "object"
564bool(true)
565string(11) "ObjectPoint"
566string(6) "string"
567Done
568