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 object type.
13   Set type of the data to "object" 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 object 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 object type */
144$type = "object";
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 object --
171-- Iteration 1 --
172string(4) "NULL"
173bool(true)
174object(stdClass)#4 (0) {
175}
176string(6) "object"
177-- Iteration 2 --
178string(7) "boolean"
179bool(true)
180object(stdClass)#4 (1) {
181  ["scalar"]=>
182  bool(false)
183}
184string(6) "object"
185-- Iteration 3 --
186string(7) "boolean"
187bool(true)
188object(stdClass)#4 (1) {
189  ["scalar"]=>
190  bool(true)
191}
192string(6) "object"
193-- Iteration 4 --
194string(7) "boolean"
195bool(true)
196object(stdClass)#4 (1) {
197  ["scalar"]=>
198  bool(true)
199}
200string(6) "object"
201-- Iteration 5 --
202string(6) "string"
203bool(true)
204object(stdClass)#4 (1) {
205  ["scalar"]=>
206  string(1) "�"
207}
208string(6) "object"
209-- Iteration 6 --
210string(6) "string"
211bool(true)
212object(stdClass)#4 (1) {
213  ["scalar"]=>
214  string(1) "f"
215}
216string(6) "object"
217-- Iteration 7 --
218string(6) "string"
219bool(true)
220object(stdClass)#4 (1) {
221  ["scalar"]=>
222  string(2) "
2233"
224}
225string(6) "object"
226-- Iteration 8 --
227string(6) "string"
228bool(true)
229object(stdClass)#4 (1) {
230  ["scalar"]=>
231  string(0) ""
232}
233string(6) "object"
234-- Iteration 9 --
235string(6) "string"
236bool(true)
237object(stdClass)#4 (1) {
238  ["scalar"]=>
239  string(0) ""
240}
241string(6) "object"
242-- Iteration 10 --
243string(6) "string"
244bool(true)
245object(stdClass)#4 (1) {
246  ["scalar"]=>
247  string(1) " "
248}
249string(6) "object"
250-- Iteration 11 --
251string(6) "string"
252bool(true)
253object(stdClass)#4 (1) {
254  ["scalar"]=>
255  string(1) " "
256}
257string(6) "object"
258-- Iteration 12 --
259string(6) "string"
260bool(true)
261object(stdClass)#4 (1) {
262  ["scalar"]=>
263  string(2) "10"
264}
265string(6) "object"
266-- Iteration 13 --
267string(6) "string"
268bool(true)
269object(stdClass)#4 (1) {
270  ["scalar"]=>
271  string(2) "10"
272}
273string(6) "object"
274-- Iteration 14 --
275string(6) "string"
276bool(true)
277object(stdClass)#4 (1) {
278  ["scalar"]=>
279  string(8) "10string"
280}
281string(6) "object"
282-- Iteration 15 --
283string(6) "string"
284bool(true)
285object(stdClass)#4 (1) {
286  ["scalar"]=>
287  string(8) "10string"
288}
289string(6) "object"
290-- Iteration 16 --
291string(6) "string"
292bool(true)
293object(stdClass)#4 (1) {
294  ["scalar"]=>
295  string(1) "1"
296}
297string(6) "object"
298-- Iteration 17 --
299string(6) "string"
300bool(true)
301object(stdClass)#4 (1) {
302  ["scalar"]=>
303  string(2) "-1"
304}
305string(6) "object"
306-- Iteration 18 --
307string(6) "string"
308bool(true)
309object(stdClass)#4 (1) {
310  ["scalar"]=>
311  string(3) "1e2"
312}
313string(6) "object"
314-- Iteration 19 --
315string(6) "string"
316bool(true)
317object(stdClass)#4 (1) {
318  ["scalar"]=>
319  string(2) " 1"
320}
321string(6) "object"
322-- Iteration 20 --
323string(6) "string"
324bool(true)
325object(stdClass)#4 (1) {
326  ["scalar"]=>
327  string(22) "2974394749328742328432"
328}
329string(6) "object"
330-- Iteration 21 --
331string(6) "string"
332bool(true)
333object(stdClass)#4 (1) {
334  ["scalar"]=>
335  string(5) "-1e-2"
336}
337string(6) "object"
338-- Iteration 22 --
339string(6) "string"
340bool(true)
341object(stdClass)#4 (1) {
342  ["scalar"]=>
343  string(1) "1"
344}
345string(6) "object"
346-- Iteration 23 --
347string(6) "string"
348bool(true)
349object(stdClass)#4 (1) {
350  ["scalar"]=>
351  string(2) "-1"
352}
353string(6) "object"
354-- Iteration 24 --
355string(6) "string"
356bool(true)
357object(stdClass)#4 (1) {
358  ["scalar"]=>
359  string(3) "1e2"
360}
361string(6) "object"
362-- Iteration 25 --
363string(6) "string"
364bool(true)
365object(stdClass)#4 (1) {
366  ["scalar"]=>
367  string(2) " 1"
368}
369string(6) "object"
370-- Iteration 26 --
371string(6) "string"
372bool(true)
373object(stdClass)#4 (1) {
374  ["scalar"]=>
375  string(22) "2974394749328742328432"
376}
377string(6) "object"
378-- Iteration 27 --
379string(6) "string"
380bool(true)
381object(stdClass)#4 (1) {
382  ["scalar"]=>
383  string(5) "-1e-2"
384}
385string(6) "object"
386-- Iteration 28 --
387string(6) "string"
388bool(true)
389object(stdClass)#4 (1) {
390  ["scalar"]=>
391  string(4) "0xff"
392}
393string(6) "object"
394-- Iteration 29 --
395string(6) "string"
396bool(true)
397object(stdClass)#4 (1) {
398  ["scalar"]=>
399  string(4) "0x55"
400}
401string(6) "object"
402-- Iteration 30 --
403string(6) "string"
404bool(true)
405object(stdClass)#4 (1) {
406  ["scalar"]=>
407  string(5) "0XA55"
408}
409string(6) "object"
410-- Iteration 31 --
411string(6) "string"
412bool(true)
413object(stdClass)#4 (1) {
414  ["scalar"]=>
415  string(5) "0X123"
416}
417string(6) "object"
418-- Iteration 32 --
419string(6) "string"
420bool(true)
421object(stdClass)#4 (1) {
422  ["scalar"]=>
423  string(4) "0123"
424}
425string(6) "object"
426-- Iteration 33 --
427string(6) "string"
428bool(true)
429object(stdClass)#4 (1) {
430  ["scalar"]=>
431  string(4) "0123"
432}
433string(6) "object"
434-- Iteration 34 --
435string(6) "string"
436bool(true)
437object(stdClass)#4 (1) {
438  ["scalar"]=>
439  string(5) "-0123"
440}
441string(6) "object"
442-- Iteration 35 --
443string(6) "string"
444bool(true)
445object(stdClass)#4 (1) {
446  ["scalar"]=>
447  string(5) "+0123"
448}
449string(6) "object"
450-- Iteration 36 --
451string(6) "string"
452bool(true)
453object(stdClass)#4 (1) {
454  ["scalar"]=>
455  string(5) "-0123"
456}
457string(6) "object"
458-- Iteration 37 --
459string(6) "string"
460bool(true)
461object(stdClass)#4 (1) {
462  ["scalar"]=>
463  string(5) "+0123"
464}
465string(6) "object"
466-- Iteration 38 --
467string(6) "string"
468bool(true)
469object(stdClass)#4 (1) {
470  ["scalar"]=>
471  string(8) "-0x80001"
472}
473string(6) "object"
474-- Iteration 39 --
475string(6) "string"
476bool(true)
477object(stdClass)#4 (1) {
478  ["scalar"]=>
479  string(8) "+0x80001"
480}
481string(6) "object"
482-- Iteration 40 --
483string(6) "string"
484bool(true)
485object(stdClass)#4 (1) {
486  ["scalar"]=>
487  string(10) "-0x80001.5"
488}
489string(6) "object"
490-- Iteration 41 --
491string(6) "string"
492bool(true)
493object(stdClass)#4 (1) {
494  ["scalar"]=>
495  string(9) "0x80001.5"
496}
497string(6) "object"
498-- Iteration 42 --
499string(6) "string"
500bool(true)
501object(stdClass)#4 (1) {
502  ["scalar"]=>
503  string(12) "@$%#$%^$%^&^"
504}
505string(6) "object"
506-- Iteration 43 --
507string(5) "array"
508bool(true)
509object(stdClass)#4 (0) {
510}
511string(6) "object"
512-- Iteration 44 --
513string(5) "array"
514bool(true)
515object(stdClass)#4 (1) {
516  ["0"]=>
517  NULL
518}
519string(6) "object"
520-- Iteration 45 --
521string(5) "array"
522bool(true)
523object(stdClass)#4 (4) {
524  ["0"]=>
525  int(1)
526  ["1"]=>
527  int(2)
528  ["2"]=>
529  int(3)
530  ["3"]=>
531  int(4)
532}
533string(6) "object"
534-- Iteration 46 --
535string(5) "array"
536bool(true)
537object(stdClass)#4 (4) {
538  ["1"]=>
539  string(3) "one"
540  ["2"]=>
541  string(3) "two"
542  ["3"]=>
543  string(5) "three"
544  ["four"]=>
545  int(4)
546}
547string(6) "object"
548-- Iteration 47 --
549string(5) "array"
550bool(true)
551object(stdClass)#4 (3) {
552  ["0"]=>
553  float(1.5)
554  ["1"]=>
555  float(2.4)
556  ["2"]=>
557  float(6500000)
558}
559string(6) "object"
560-- Iteration 48 --
561string(6) "double"
562bool(true)
563object(stdClass)#4 (1) {
564  ["scalar"]=>
565  float(-2147483648)
566}
567string(6) "object"
568-- Iteration 49 --
569string(7) "integer"
570bool(true)
571object(stdClass)#4 (1) {
572  ["scalar"]=>
573  int(2147483647)
574}
575string(6) "object"
576-- Iteration 50 --
577string(6) "double"
578bool(true)
579object(stdClass)#4 (1) {
580  ["scalar"]=>
581  float(2147483649)
582}
583string(6) "object"
584-- Iteration 51 --
585string(6) "double"
586bool(true)
587object(stdClass)#4 (1) {
588  ["scalar"]=>
589  float(1232147483649)
590}
591string(6) "object"
592-- Iteration 52 --
593string(7) "integer"
594bool(true)
595object(stdClass)#4 (1) {
596  ["scalar"]=>
597  int(85)
598}
599string(6) "object"
600-- Iteration 53 --
601string(6) "double"
602bool(true)
603object(stdClass)#4 (1) {
604  ["scalar"]=>
605  float(1058513956921)
606}
607string(6) "object"
608-- Iteration 54 --
609string(7) "integer"
610bool(true)
611object(stdClass)#4 (1) {
612  ["scalar"]=>
613  int(-21903)
614}
615string(6) "object"
616-- Iteration 55 --
617string(7) "integer"
618bool(true)
619object(stdClass)#4 (1) {
620  ["scalar"]=>
621  int(365)
622}
623string(6) "object"
624-- Iteration 56 --
625string(7) "integer"
626bool(true)
627object(stdClass)#4 (1) {
628  ["scalar"]=>
629  int(-365)
630}
631string(6) "object"
632-- Iteration 57 --
633string(6) "double"
634bool(true)
635object(stdClass)#4 (1) {
636  ["scalar"]=>
637  float(80561044571754)
638}
639string(6) "object"
640-- Iteration 58 --
641string(6) "double"
642bool(true)
643object(stdClass)#4 (1) {
644  ["scalar"]=>
645  float(100000)
646}
647string(6) "object"
648-- Iteration 59 --
649string(6) "double"
650bool(true)
651object(stdClass)#4 (1) {
652  ["scalar"]=>
653  float(-100000)
654}
655string(6) "object"
656-- Iteration 60 --
657string(6) "double"
658bool(true)
659object(stdClass)#4 (1) {
660  ["scalar"]=>
661  float(100000)
662}
663string(6) "object"
664-- Iteration 61 --
665string(6) "double"
666bool(true)
667object(stdClass)#4 (1) {
668  ["scalar"]=>
669  float(-100000)
670}
671string(6) "object"
672-- Iteration 62 --
673string(6) "double"
674bool(true)
675object(stdClass)#4 (1) {
676  ["scalar"]=>
677  float(-1.5)
678}
679string(6) "object"
680-- Iteration 63 --
681string(6) "double"
682bool(true)
683object(stdClass)#4 (1) {
684  ["scalar"]=>
685  float(0.5)
686}
687string(6) "object"
688-- Iteration 64 --
689string(6) "double"
690bool(true)
691object(stdClass)#4 (1) {
692  ["scalar"]=>
693  float(-0.5)
694}
695string(6) "object"
696-- Iteration 65 --
697string(6) "double"
698bool(true)
699object(stdClass)#4 (1) {
700  ["scalar"]=>
701  float(500000)
702}
703string(6) "object"
704-- Iteration 66 --
705string(6) "double"
706bool(true)
707object(stdClass)#4 (1) {
708  ["scalar"]=>
709  float(-500000)
710}
711string(6) "object"
712-- Iteration 67 --
713string(6) "double"
714bool(true)
715object(stdClass)#4 (1) {
716  ["scalar"]=>
717  float(-5.0E-7)
718}
719string(6) "object"
720-- Iteration 68 --
721string(6) "double"
722bool(true)
723object(stdClass)#4 (1) {
724  ["scalar"]=>
725  float(500000)
726}
727string(6) "object"
728-- Iteration 69 --
729string(6) "double"
730bool(true)
731object(stdClass)#4 (1) {
732  ["scalar"]=>
733  float(-500000)
734}
735string(6) "object"
736-- Iteration 70 --
737string(6) "double"
738bool(true)
739object(stdClass)#4 (1) {
740  ["scalar"]=>
741  float(512000)
742}
743string(6) "object"
744-- Iteration 71 --
745string(6) "double"
746bool(true)
747object(stdClass)#4 (1) {
748  ["scalar"]=>
749  float(-512000)
750}
751string(6) "object"
752-- Iteration 72 --
753string(6) "double"
754bool(true)
755object(stdClass)#4 (1) {
756  ["scalar"]=>
757  float(5.12E-7)
758}
759string(6) "object"
760-- Iteration 73 --
761string(6) "double"
762bool(true)
763object(stdClass)#4 (1) {
764  ["scalar"]=>
765  float(5.12E-7)
766}
767string(6) "object"
768-- Iteration 74 --
769string(6) "double"
770bool(true)
771object(stdClass)#4 (1) {
772  ["scalar"]=>
773  float(512000)
774}
775string(6) "object"
776-- Iteration 75 --
777string(6) "double"
778bool(true)
779object(stdClass)#4 (1) {
780  ["scalar"]=>
781  float(-512000)
782}
783string(6) "object"
784-- Iteration 76 --
785string(6) "object"
786bool(true)
787object(point)#1 (2) {
788  ["x"]=>
789  NULL
790  ["y"]=>
791  NULL
792}
793string(6) "object"
794-- Iteration 77 --
795string(6) "object"
796bool(true)
797object(point)#2 (2) {
798  ["x"]=>
799  float(2.5)
800  ["y"]=>
801  float(40.5)
802}
803string(6) "object"
804-- Iteration 78 --
805string(6) "object"
806bool(true)
807object(point)#3 (2) {
808  ["x"]=>
809  int(0)
810  ["y"]=>
811  int(0)
812}
813string(6) "object"
814Done
815