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/* Prototype: string gettype ( mixed $var );
12   Description: Returns the type of the PHP variable var
13
14   Prototype: bool settype ( mixed &$var, string $type );
15   Description: Set the type of variable var to type
16*/
17
18/* Test usage variation of gettype() and settype() functions:
19         settype() to object type.
20   Set type of the data to "object" and verify using gettype
21   Following are performed in the listed sequence:
22     get the current type of the variable
23     set the type of the variable to object type
24     dump the variable to see its new data
25     get the new type of the variable
26*/
27
28/* function to handle catchable errors */
29function foo($errno, $errstr, $errfile, $errline) {
30//	var_dump($errstr);
31   // print error no and error string
32   echo "$errno: $errstr\n";
33}
34//set the error handler, this is required as
35// settype() would fail with catachable fatal error
36set_error_handler("foo");
37
38$var1 = "another string";
39$var2 = array(2,3,4);
40
41// a variable which is unset
42$unset_var = 10.5;
43unset( $unset_var );
44
45class point
46{
47  var $x;
48  var $y;
49
50  function __construct($x, $y) {
51     $this->x = $x;
52     $this->y = $y;
53  }
54
55  function __toString() {
56     return "ObjectPoint";
57  }
58}
59
60$var_values = array (
61  /* nulls */
62  null,
63
64  /* boolean */
65  FALSE,
66  TRUE,
67  true,
68
69  /* strings */
70  "\xFF",
71  "\x66",
72  "\0123",
73  "",
74  '',
75  " ",
76  ' ',
77  /* numerics in the form of string */
78  '10',
79  "10",
80  "10string",
81  '10string',
82  "1",
83  "-1",
84  "1e2",
85  " 1",
86  "2974394749328742328432",
87  "-1e-2",
88  '1',
89  '-1',
90  '1e2',
91  ' 1',
92  '2974394749328742328432',
93  '-1e-2',
94  "0xff",
95  '0x55',
96  '0XA55',
97  '0X123',
98  "0123",
99  '0123',
100  "-0123",
101  "+0123",
102  '-0123',
103  '+0123',
104  "-0x80001", // invalid numerics as its prefix with sign or have decimal points
105  "+0x80001",
106  "-0x80001.5",
107  "0x80001.5",
108  "@$%#$%^$%^&^",
109
110  /* arrays */
111  array(),
112  array(NULL),
113  array(1,2,3,4),
114  array(1 => "one", 2 => "two", "3" => "three", "four" => 4),
115  array(1.5, 2.4, 6.5e6),
116
117  /* integers */
118  -2147483648, // max -ne int value
119  2147483647,
120  2147483649,
121  1232147483649,
122  0x55,
123  0xF674593039, // a hex value > than max int
124  -0X558F,
125  0555,
126  -0555,
127  02224242434343152, // an octal value > than max int
128
129  /* floats */
130  1e5,
131  -1e5,
132  1E5,
133  -1E5,
134  -1.5,
135  .5,
136  -.5,
137  .5e6,
138  -.5e6,
139  -.5e-6,
140  .5e+6,
141  -.5e+6,
142  .512E6,
143  -.512E6,
144  .512E-6,
145  +.512E-6,
146  .512E+6,
147  -.512E+6,
148
149  new point(NULL, NULL),
150  new point(2.5, 40.5),
151  new point(0, 0),
152
153  /* undefined/unset vars */
154  $unset_var,
155  $undef_var
156);
157
158/* test conversion to object type */
159$type = "object";
160
161echo "\n*** Testing gettype() & settype() functions : usage variations ***\n";
162echo "\n-- Setting type of data to $type --\n";
163$loop_count = 1;
164foreach ($var_values as $var) {
165  echo "-- Iteration $loop_count --\n"; $loop_count++;
166
167  // get the current data type
168  var_dump( gettype($var) );
169
170  // convert it to null
171  var_dump( settype($var, $type) );
172
173  // dump the converted data
174  var_dump( $var );
175
176  // check the new type after conversion
177  var_dump( gettype($var) );
178}
179
180echo "Done\n";
181?>
182--EXPECT--
1838: Undefined variable: unset_var
1848: Undefined variable: undef_var
185
186*** Testing gettype() & settype() functions : usage variations ***
187
188-- Setting type of data to object --
189-- Iteration 1 --
190string(4) "NULL"
191bool(true)
192object(stdClass)#4 (0) {
193}
194string(6) "object"
195-- Iteration 2 --
196string(7) "boolean"
197bool(true)
198object(stdClass)#4 (1) {
199  ["scalar"]=>
200  bool(false)
201}
202string(6) "object"
203-- Iteration 3 --
204string(7) "boolean"
205bool(true)
206object(stdClass)#4 (1) {
207  ["scalar"]=>
208  bool(true)
209}
210string(6) "object"
211-- Iteration 4 --
212string(7) "boolean"
213bool(true)
214object(stdClass)#4 (1) {
215  ["scalar"]=>
216  bool(true)
217}
218string(6) "object"
219-- Iteration 5 --
220string(6) "string"
221bool(true)
222object(stdClass)#4 (1) {
223  ["scalar"]=>
224  string(1) "�"
225}
226string(6) "object"
227-- Iteration 6 --
228string(6) "string"
229bool(true)
230object(stdClass)#4 (1) {
231  ["scalar"]=>
232  string(1) "f"
233}
234string(6) "object"
235-- Iteration 7 --
236string(6) "string"
237bool(true)
238object(stdClass)#4 (1) {
239  ["scalar"]=>
240  string(2) "
2413"
242}
243string(6) "object"
244-- Iteration 8 --
245string(6) "string"
246bool(true)
247object(stdClass)#4 (1) {
248  ["scalar"]=>
249  string(0) ""
250}
251string(6) "object"
252-- Iteration 9 --
253string(6) "string"
254bool(true)
255object(stdClass)#4 (1) {
256  ["scalar"]=>
257  string(0) ""
258}
259string(6) "object"
260-- Iteration 10 --
261string(6) "string"
262bool(true)
263object(stdClass)#4 (1) {
264  ["scalar"]=>
265  string(1) " "
266}
267string(6) "object"
268-- Iteration 11 --
269string(6) "string"
270bool(true)
271object(stdClass)#4 (1) {
272  ["scalar"]=>
273  string(1) " "
274}
275string(6) "object"
276-- Iteration 12 --
277string(6) "string"
278bool(true)
279object(stdClass)#4 (1) {
280  ["scalar"]=>
281  string(2) "10"
282}
283string(6) "object"
284-- Iteration 13 --
285string(6) "string"
286bool(true)
287object(stdClass)#4 (1) {
288  ["scalar"]=>
289  string(2) "10"
290}
291string(6) "object"
292-- Iteration 14 --
293string(6) "string"
294bool(true)
295object(stdClass)#4 (1) {
296  ["scalar"]=>
297  string(8) "10string"
298}
299string(6) "object"
300-- Iteration 15 --
301string(6) "string"
302bool(true)
303object(stdClass)#4 (1) {
304  ["scalar"]=>
305  string(8) "10string"
306}
307string(6) "object"
308-- Iteration 16 --
309string(6) "string"
310bool(true)
311object(stdClass)#4 (1) {
312  ["scalar"]=>
313  string(1) "1"
314}
315string(6) "object"
316-- Iteration 17 --
317string(6) "string"
318bool(true)
319object(stdClass)#4 (1) {
320  ["scalar"]=>
321  string(2) "-1"
322}
323string(6) "object"
324-- Iteration 18 --
325string(6) "string"
326bool(true)
327object(stdClass)#4 (1) {
328  ["scalar"]=>
329  string(3) "1e2"
330}
331string(6) "object"
332-- Iteration 19 --
333string(6) "string"
334bool(true)
335object(stdClass)#4 (1) {
336  ["scalar"]=>
337  string(2) " 1"
338}
339string(6) "object"
340-- Iteration 20 --
341string(6) "string"
342bool(true)
343object(stdClass)#4 (1) {
344  ["scalar"]=>
345  string(22) "2974394749328742328432"
346}
347string(6) "object"
348-- Iteration 21 --
349string(6) "string"
350bool(true)
351object(stdClass)#4 (1) {
352  ["scalar"]=>
353  string(5) "-1e-2"
354}
355string(6) "object"
356-- Iteration 22 --
357string(6) "string"
358bool(true)
359object(stdClass)#4 (1) {
360  ["scalar"]=>
361  string(1) "1"
362}
363string(6) "object"
364-- Iteration 23 --
365string(6) "string"
366bool(true)
367object(stdClass)#4 (1) {
368  ["scalar"]=>
369  string(2) "-1"
370}
371string(6) "object"
372-- Iteration 24 --
373string(6) "string"
374bool(true)
375object(stdClass)#4 (1) {
376  ["scalar"]=>
377  string(3) "1e2"
378}
379string(6) "object"
380-- Iteration 25 --
381string(6) "string"
382bool(true)
383object(stdClass)#4 (1) {
384  ["scalar"]=>
385  string(2) " 1"
386}
387string(6) "object"
388-- Iteration 26 --
389string(6) "string"
390bool(true)
391object(stdClass)#4 (1) {
392  ["scalar"]=>
393  string(22) "2974394749328742328432"
394}
395string(6) "object"
396-- Iteration 27 --
397string(6) "string"
398bool(true)
399object(stdClass)#4 (1) {
400  ["scalar"]=>
401  string(5) "-1e-2"
402}
403string(6) "object"
404-- Iteration 28 --
405string(6) "string"
406bool(true)
407object(stdClass)#4 (1) {
408  ["scalar"]=>
409  string(4) "0xff"
410}
411string(6) "object"
412-- Iteration 29 --
413string(6) "string"
414bool(true)
415object(stdClass)#4 (1) {
416  ["scalar"]=>
417  string(4) "0x55"
418}
419string(6) "object"
420-- Iteration 30 --
421string(6) "string"
422bool(true)
423object(stdClass)#4 (1) {
424  ["scalar"]=>
425  string(5) "0XA55"
426}
427string(6) "object"
428-- Iteration 31 --
429string(6) "string"
430bool(true)
431object(stdClass)#4 (1) {
432  ["scalar"]=>
433  string(5) "0X123"
434}
435string(6) "object"
436-- Iteration 32 --
437string(6) "string"
438bool(true)
439object(stdClass)#4 (1) {
440  ["scalar"]=>
441  string(4) "0123"
442}
443string(6) "object"
444-- Iteration 33 --
445string(6) "string"
446bool(true)
447object(stdClass)#4 (1) {
448  ["scalar"]=>
449  string(4) "0123"
450}
451string(6) "object"
452-- Iteration 34 --
453string(6) "string"
454bool(true)
455object(stdClass)#4 (1) {
456  ["scalar"]=>
457  string(5) "-0123"
458}
459string(6) "object"
460-- Iteration 35 --
461string(6) "string"
462bool(true)
463object(stdClass)#4 (1) {
464  ["scalar"]=>
465  string(5) "+0123"
466}
467string(6) "object"
468-- Iteration 36 --
469string(6) "string"
470bool(true)
471object(stdClass)#4 (1) {
472  ["scalar"]=>
473  string(5) "-0123"
474}
475string(6) "object"
476-- Iteration 37 --
477string(6) "string"
478bool(true)
479object(stdClass)#4 (1) {
480  ["scalar"]=>
481  string(5) "+0123"
482}
483string(6) "object"
484-- Iteration 38 --
485string(6) "string"
486bool(true)
487object(stdClass)#4 (1) {
488  ["scalar"]=>
489  string(8) "-0x80001"
490}
491string(6) "object"
492-- Iteration 39 --
493string(6) "string"
494bool(true)
495object(stdClass)#4 (1) {
496  ["scalar"]=>
497  string(8) "+0x80001"
498}
499string(6) "object"
500-- Iteration 40 --
501string(6) "string"
502bool(true)
503object(stdClass)#4 (1) {
504  ["scalar"]=>
505  string(10) "-0x80001.5"
506}
507string(6) "object"
508-- Iteration 41 --
509string(6) "string"
510bool(true)
511object(stdClass)#4 (1) {
512  ["scalar"]=>
513  string(9) "0x80001.5"
514}
515string(6) "object"
516-- Iteration 42 --
517string(6) "string"
518bool(true)
519object(stdClass)#4 (1) {
520  ["scalar"]=>
521  string(12) "@$%#$%^$%^&^"
522}
523string(6) "object"
524-- Iteration 43 --
525string(5) "array"
526bool(true)
527object(stdClass)#4 (0) {
528}
529string(6) "object"
530-- Iteration 44 --
531string(5) "array"
532bool(true)
533object(stdClass)#4 (1) {
534  ["0"]=>
535  NULL
536}
537string(6) "object"
538-- Iteration 45 --
539string(5) "array"
540bool(true)
541object(stdClass)#4 (4) {
542  ["0"]=>
543  int(1)
544  ["1"]=>
545  int(2)
546  ["2"]=>
547  int(3)
548  ["3"]=>
549  int(4)
550}
551string(6) "object"
552-- Iteration 46 --
553string(5) "array"
554bool(true)
555object(stdClass)#4 (4) {
556  ["1"]=>
557  string(3) "one"
558  ["2"]=>
559  string(3) "two"
560  ["3"]=>
561  string(5) "three"
562  ["four"]=>
563  int(4)
564}
565string(6) "object"
566-- Iteration 47 --
567string(5) "array"
568bool(true)
569object(stdClass)#4 (3) {
570  ["0"]=>
571  float(1.5)
572  ["1"]=>
573  float(2.4)
574  ["2"]=>
575  float(6500000)
576}
577string(6) "object"
578-- Iteration 48 --
579string(6) "double"
580bool(true)
581object(stdClass)#4 (1) {
582  ["scalar"]=>
583  float(-2147483648)
584}
585string(6) "object"
586-- Iteration 49 --
587string(7) "integer"
588bool(true)
589object(stdClass)#4 (1) {
590  ["scalar"]=>
591  int(2147483647)
592}
593string(6) "object"
594-- Iteration 50 --
595string(6) "double"
596bool(true)
597object(stdClass)#4 (1) {
598  ["scalar"]=>
599  float(2147483649)
600}
601string(6) "object"
602-- Iteration 51 --
603string(6) "double"
604bool(true)
605object(stdClass)#4 (1) {
606  ["scalar"]=>
607  float(1232147483649)
608}
609string(6) "object"
610-- Iteration 52 --
611string(7) "integer"
612bool(true)
613object(stdClass)#4 (1) {
614  ["scalar"]=>
615  int(85)
616}
617string(6) "object"
618-- Iteration 53 --
619string(6) "double"
620bool(true)
621object(stdClass)#4 (1) {
622  ["scalar"]=>
623  float(1058513956921)
624}
625string(6) "object"
626-- Iteration 54 --
627string(7) "integer"
628bool(true)
629object(stdClass)#4 (1) {
630  ["scalar"]=>
631  int(-21903)
632}
633string(6) "object"
634-- Iteration 55 --
635string(7) "integer"
636bool(true)
637object(stdClass)#4 (1) {
638  ["scalar"]=>
639  int(365)
640}
641string(6) "object"
642-- Iteration 56 --
643string(7) "integer"
644bool(true)
645object(stdClass)#4 (1) {
646  ["scalar"]=>
647  int(-365)
648}
649string(6) "object"
650-- Iteration 57 --
651string(6) "double"
652bool(true)
653object(stdClass)#4 (1) {
654  ["scalar"]=>
655  float(80561044571754)
656}
657string(6) "object"
658-- Iteration 58 --
659string(6) "double"
660bool(true)
661object(stdClass)#4 (1) {
662  ["scalar"]=>
663  float(100000)
664}
665string(6) "object"
666-- Iteration 59 --
667string(6) "double"
668bool(true)
669object(stdClass)#4 (1) {
670  ["scalar"]=>
671  float(-100000)
672}
673string(6) "object"
674-- Iteration 60 --
675string(6) "double"
676bool(true)
677object(stdClass)#4 (1) {
678  ["scalar"]=>
679  float(100000)
680}
681string(6) "object"
682-- Iteration 61 --
683string(6) "double"
684bool(true)
685object(stdClass)#4 (1) {
686  ["scalar"]=>
687  float(-100000)
688}
689string(6) "object"
690-- Iteration 62 --
691string(6) "double"
692bool(true)
693object(stdClass)#4 (1) {
694  ["scalar"]=>
695  float(-1.5)
696}
697string(6) "object"
698-- Iteration 63 --
699string(6) "double"
700bool(true)
701object(stdClass)#4 (1) {
702  ["scalar"]=>
703  float(0.5)
704}
705string(6) "object"
706-- Iteration 64 --
707string(6) "double"
708bool(true)
709object(stdClass)#4 (1) {
710  ["scalar"]=>
711  float(-0.5)
712}
713string(6) "object"
714-- Iteration 65 --
715string(6) "double"
716bool(true)
717object(stdClass)#4 (1) {
718  ["scalar"]=>
719  float(500000)
720}
721string(6) "object"
722-- Iteration 66 --
723string(6) "double"
724bool(true)
725object(stdClass)#4 (1) {
726  ["scalar"]=>
727  float(-500000)
728}
729string(6) "object"
730-- Iteration 67 --
731string(6) "double"
732bool(true)
733object(stdClass)#4 (1) {
734  ["scalar"]=>
735  float(-5.0E-7)
736}
737string(6) "object"
738-- Iteration 68 --
739string(6) "double"
740bool(true)
741object(stdClass)#4 (1) {
742  ["scalar"]=>
743  float(500000)
744}
745string(6) "object"
746-- Iteration 69 --
747string(6) "double"
748bool(true)
749object(stdClass)#4 (1) {
750  ["scalar"]=>
751  float(-500000)
752}
753string(6) "object"
754-- Iteration 70 --
755string(6) "double"
756bool(true)
757object(stdClass)#4 (1) {
758  ["scalar"]=>
759  float(512000)
760}
761string(6) "object"
762-- Iteration 71 --
763string(6) "double"
764bool(true)
765object(stdClass)#4 (1) {
766  ["scalar"]=>
767  float(-512000)
768}
769string(6) "object"
770-- Iteration 72 --
771string(6) "double"
772bool(true)
773object(stdClass)#4 (1) {
774  ["scalar"]=>
775  float(5.12E-7)
776}
777string(6) "object"
778-- Iteration 73 --
779string(6) "double"
780bool(true)
781object(stdClass)#4 (1) {
782  ["scalar"]=>
783  float(5.12E-7)
784}
785string(6) "object"
786-- Iteration 74 --
787string(6) "double"
788bool(true)
789object(stdClass)#4 (1) {
790  ["scalar"]=>
791  float(512000)
792}
793string(6) "object"
794-- Iteration 75 --
795string(6) "double"
796bool(true)
797object(stdClass)#4 (1) {
798  ["scalar"]=>
799  float(-512000)
800}
801string(6) "object"
802-- Iteration 76 --
803string(6) "object"
804bool(true)
805object(point)#1 (2) {
806  ["x"]=>
807  NULL
808  ["y"]=>
809  NULL
810}
811string(6) "object"
812-- Iteration 77 --
813string(6) "object"
814bool(true)
815object(point)#2 (2) {
816  ["x"]=>
817  float(2.5)
818  ["y"]=>
819  float(40.5)
820}
821string(6) "object"
822-- Iteration 78 --
823string(6) "object"
824bool(true)
825object(point)#3 (2) {
826  ["x"]=>
827  int(0)
828  ["y"]=>
829  int(0)
830}
831string(6) "object"
832-- Iteration 79 --
833string(4) "NULL"
834bool(true)
835object(stdClass)#4 (0) {
836}
837string(6) "object"
838-- Iteration 80 --
839string(4) "NULL"
840bool(true)
841object(stdClass)#4 (0) {
842}
843string(6) "object"
844Done
845