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