1--TEST--
2Test token_get_all() function : usage variations - with class/object constructs
3--SKIPIF--
4<?php if (!extension_loaded("tokenizer")) print "skip"; ?>
5--FILE--
6<?php
7/*
8 * Testing token_get_all() with different class/object keywords
9 *   scope related :
10 *     static - T_STATIC(346), global - T_GLOBAL(340),
11 *     private - T_PRIVATE(343), public - T_PUBLIC(341),
12 *     protected - T_PROTECTED(342)
13 *   class/object related :
14 *     var - T_VAR(347), abstract - T_ABSTRACT(345),
15 *     interface - T_INTERFACE(353), class - T_CLASS(352),
16 *     extends - T_EXTENDS(354), implements - T_IMPLEMENTS(355), new - T_NEW(299)
17*/
18
19echo "*** Testing token_get_all() : with class/object constructs ***\n";
20
21$source = '<?php
22interface MyInterface
23{
24  public const var $var = 10;
25}
26abstract class MyClass
27{
28  private var $a;
29  public var $b;
30  protected var $c;
31  static $d;
32  final $e = 10;
33
34  abstract public function myFunction($a);
35}
36class ChildClass extends MyClass implements MyInterface
37{
38  global $value;
39  function myFunction($a)
40  {
41    $a = new ChildClass();
42    if($a instanceof MyClass)
43      echo "object created";
44  }
45}
46ChildClass::myFunction(10);
47?>';
48$tokens =  token_get_all($source);
49var_dump($tokens);
50
51echo "Done"
52?>
53--EXPECTF--
54*** Testing token_get_all() : with class/object constructs ***
55array(145) {
56  [0]=>
57  array(3) {
58    [0]=>
59    int(%d)
60    [1]=>
61    string(6) "<?php
62"
63    [2]=>
64    int(1)
65  }
66  [1]=>
67  array(3) {
68    [0]=>
69    int(%d)
70    [1]=>
71    string(9) "interface"
72    [2]=>
73    int(2)
74  }
75  [2]=>
76  array(3) {
77    [0]=>
78    int(%d)
79    [1]=>
80    string(1) " "
81    [2]=>
82    int(2)
83  }
84  [3]=>
85  array(3) {
86    [0]=>
87    int(%d)
88    [1]=>
89    string(11) "MyInterface"
90    [2]=>
91    int(2)
92  }
93  [4]=>
94  array(3) {
95    [0]=>
96    int(%d)
97    [1]=>
98    string(1) "
99"
100    [2]=>
101    int(2)
102  }
103  [5]=>
104  string(1) "{"
105  [6]=>
106  array(3) {
107    [0]=>
108    int(%d)
109    [1]=>
110    string(3) "
111  "
112    [2]=>
113    int(%d)
114  }
115  [7]=>
116  array(3) {
117    [0]=>
118    int(%d)
119    [1]=>
120    string(6) "public"
121    [2]=>
122    int(4)
123  }
124  [8]=>
125  array(3) {
126    [0]=>
127    int(%d)
128    [1]=>
129    string(1) " "
130    [2]=>
131    int(4)
132  }
133  [9]=>
134  array(3) {
135    [0]=>
136    int(%d)
137    [1]=>
138    string(5) "const"
139    [2]=>
140    int(4)
141  }
142  [10]=>
143  array(3) {
144    [0]=>
145    int(%d)
146    [1]=>
147    string(1) " "
148    [2]=>
149    int(4)
150  }
151  [11]=>
152  array(3) {
153    [0]=>
154    int(%d)
155    [1]=>
156    string(3) "var"
157    [2]=>
158    int(4)
159  }
160  [12]=>
161  array(3) {
162    [0]=>
163    int(%d)
164    [1]=>
165    string(1) " "
166    [2]=>
167    int(4)
168  }
169  [13]=>
170  array(3) {
171    [0]=>
172    int(%d)
173    [1]=>
174    string(4) "$var"
175    [2]=>
176    int(4)
177  }
178  [14]=>
179  array(3) {
180    [0]=>
181    int(%d)
182    [1]=>
183    string(1) " "
184    [2]=>
185    int(4)
186  }
187  [15]=>
188  string(1) "="
189  [16]=>
190  array(3) {
191    [0]=>
192    int(%d)
193    [1]=>
194    string(1) " "
195    [2]=>
196    int(4)
197  }
198  [17]=>
199  array(3) {
200    [0]=>
201    int(%d)
202    [1]=>
203    string(2) "10"
204    [2]=>
205    int(4)
206  }
207  [18]=>
208  string(1) ";"
209  [19]=>
210  array(3) {
211    [0]=>
212    int(%d)
213    [1]=>
214    string(1) "
215"
216    [2]=>
217    int(4)
218  }
219  [20]=>
220  string(1) "}"
221  [21]=>
222  array(3) {
223    [0]=>
224    int(%d)
225    [1]=>
226    string(1) "
227"
228    [2]=>
229    int(5)
230  }
231  [22]=>
232  array(3) {
233    [0]=>
234    int(%d)
235    [1]=>
236    string(8) "abstract"
237    [2]=>
238    int(6)
239  }
240  [23]=>
241  array(3) {
242    [0]=>
243    int(%d)
244    [1]=>
245    string(1) " "
246    [2]=>
247    int(6)
248  }
249  [24]=>
250  array(3) {
251    [0]=>
252    int(%d)
253    [1]=>
254    string(5) "class"
255    [2]=>
256    int(6)
257  }
258  [25]=>
259  array(3) {
260    [0]=>
261    int(%d)
262    [1]=>
263    string(1) " "
264    [2]=>
265    int(6)
266  }
267  [26]=>
268  array(3) {
269    [0]=>
270    int(%d)
271    [1]=>
272    string(7) "MyClass"
273    [2]=>
274    int(6)
275  }
276  [27]=>
277  array(3) {
278    [0]=>
279    int(%d)
280    [1]=>
281    string(1) "
282"
283    [2]=>
284    int(6)
285  }
286  [28]=>
287  string(1) "{"
288  [29]=>
289  array(3) {
290    [0]=>
291    int(%d)
292    [1]=>
293    string(3) "
294  "
295    [2]=>
296    int(7)
297  }
298  [30]=>
299  array(3) {
300    [0]=>
301    int(%d)
302    [1]=>
303    string(7) "private"
304    [2]=>
305    int(8)
306  }
307  [31]=>
308  array(3) {
309    [0]=>
310    int(%d)
311    [1]=>
312    string(1) " "
313    [2]=>
314    int(8)
315  }
316  [32]=>
317  array(3) {
318    [0]=>
319    int(%d)
320    [1]=>
321    string(3) "var"
322    [2]=>
323    int(8)
324  }
325  [33]=>
326  array(3) {
327    [0]=>
328    int(%d)
329    [1]=>
330    string(1) " "
331    [2]=>
332    int(8)
333  }
334  [34]=>
335  array(3) {
336    [0]=>
337    int(%d)
338    [1]=>
339    string(2) "$a"
340    [2]=>
341    int(8)
342  }
343  [35]=>
344  string(1) ";"
345  [36]=>
346  array(3) {
347    [0]=>
348    int(%d)
349    [1]=>
350    string(3) "
351  "
352    [2]=>
353    int(8)
354  }
355  [37]=>
356  array(3) {
357    [0]=>
358    int(%d)
359    [1]=>
360    string(6) "public"
361    [2]=>
362    int(9)
363  }
364  [38]=>
365  array(3) {
366    [0]=>
367    int(%d)
368    [1]=>
369    string(1) " "
370    [2]=>
371    int(9)
372  }
373  [39]=>
374  array(3) {
375    [0]=>
376    int(%d)
377    [1]=>
378    string(3) "var"
379    [2]=>
380    int(9)
381  }
382  [40]=>
383  array(3) {
384    [0]=>
385    int(%d)
386    [1]=>
387    string(1) " "
388    [2]=>
389    int(9)
390  }
391  [41]=>
392  array(3) {
393    [0]=>
394    int(%d)
395    [1]=>
396    string(2) "$b"
397    [2]=>
398    int(9)
399  }
400  [42]=>
401  string(1) ";"
402  [43]=>
403  array(3) {
404    [0]=>
405    int(%d)
406    [1]=>
407    string(3) "
408  "
409    [2]=>
410    int(9)
411  }
412  [44]=>
413  array(3) {
414    [0]=>
415    int(%d)
416    [1]=>
417    string(9) "protected"
418    [2]=>
419    int(10)
420  }
421  [45]=>
422  array(3) {
423    [0]=>
424    int(%d)
425    [1]=>
426    string(1) " "
427    [2]=>
428    int(10)
429  }
430  [46]=>
431  array(3) {
432    [0]=>
433    int(%d)
434    [1]=>
435    string(3) "var"
436    [2]=>
437    int(10)
438  }
439  [47]=>
440  array(3) {
441    [0]=>
442    int(%d)
443    [1]=>
444    string(1) " "
445    [2]=>
446    int(10)
447  }
448  [48]=>
449  array(3) {
450    [0]=>
451    int(%d)
452    [1]=>
453    string(2) "$c"
454    [2]=>
455    int(10)
456  }
457  [49]=>
458  string(1) ";"
459  [50]=>
460  array(3) {
461    [0]=>
462    int(%d)
463    [1]=>
464    string(3) "
465  "
466    [2]=>
467    int(10)
468  }
469  [51]=>
470  array(3) {
471    [0]=>
472    int(%d)
473    [1]=>
474    string(6) "static"
475    [2]=>
476    int(11)
477  }
478  [52]=>
479  array(3) {
480    [0]=>
481    int(%d)
482    [1]=>
483    string(1) " "
484    [2]=>
485    int(11)
486  }
487  [53]=>
488  array(3) {
489    [0]=>
490    int(%d)
491    [1]=>
492    string(2) "$d"
493    [2]=>
494    int(11)
495  }
496  [54]=>
497  string(1) ";"
498  [55]=>
499  array(3) {
500    [0]=>
501    int(%d)
502    [1]=>
503    string(3) "
504  "
505    [2]=>
506    int(11)
507  }
508  [56]=>
509  array(3) {
510    [0]=>
511    int(%d)
512    [1]=>
513    string(5) "final"
514    [2]=>
515    int(12)
516  }
517  [57]=>
518  array(3) {
519    [0]=>
520    int(%d)
521    [1]=>
522    string(1) " "
523    [2]=>
524    int(12)
525  }
526  [58]=>
527  array(3) {
528    [0]=>
529    int(%d)
530    [1]=>
531    string(2) "$e"
532    [2]=>
533    int(12)
534  }
535  [59]=>
536  array(3) {
537    [0]=>
538    int(%d)
539    [1]=>
540    string(1) " "
541    [2]=>
542    int(12)
543  }
544  [60]=>
545  string(1) "="
546  [61]=>
547  array(3) {
548    [0]=>
549    int(%d)
550    [1]=>
551    string(1) " "
552    [2]=>
553    int(12)
554  }
555  [62]=>
556  array(3) {
557    [0]=>
558    int(%d)
559    [1]=>
560    string(2) "10"
561    [2]=>
562    int(12)
563  }
564  [63]=>
565  string(1) ";"
566  [64]=>
567  array(3) {
568    [0]=>
569    int(%d)
570    [1]=>
571    string(4) "
572
573  "
574    [2]=>
575    int(12)
576  }
577  [65]=>
578  array(3) {
579    [0]=>
580    int(%d)
581    [1]=>
582    string(8) "abstract"
583    [2]=>
584    int(14)
585  }
586  [66]=>
587  array(3) {
588    [0]=>
589    int(%d)
590    [1]=>
591    string(1) " "
592    [2]=>
593    int(14)
594  }
595  [67]=>
596  array(3) {
597    [0]=>
598    int(%d)
599    [1]=>
600    string(6) "public"
601    [2]=>
602    int(14)
603  }
604  [68]=>
605  array(3) {
606    [0]=>
607    int(%d)
608    [1]=>
609    string(1) " "
610    [2]=>
611    int(14)
612  }
613  [69]=>
614  array(3) {
615    [0]=>
616    int(%d)
617    [1]=>
618    string(8) "function"
619    [2]=>
620    int(14)
621  }
622  [70]=>
623  array(3) {
624    [0]=>
625    int(%d)
626    [1]=>
627    string(1) " "
628    [2]=>
629    int(14)
630  }
631  [71]=>
632  array(3) {
633    [0]=>
634    int(%d)
635    [1]=>
636    string(10) "myFunction"
637    [2]=>
638    int(14)
639  }
640  [72]=>
641  string(1) "("
642  [73]=>
643  array(3) {
644    [0]=>
645    int(%d)
646    [1]=>
647    string(2) "$a"
648    [2]=>
649    int(14)
650  }
651  [74]=>
652  string(1) ")"
653  [75]=>
654  string(1) ";"
655  [76]=>
656  array(3) {
657    [0]=>
658    int(%d)
659    [1]=>
660    string(1) "
661"
662    [2]=>
663    int(14)
664  }
665  [77]=>
666  string(1) "}"
667  [78]=>
668  array(3) {
669    [0]=>
670    int(%d)
671    [1]=>
672    string(1) "
673"
674    [2]=>
675    int(15)
676  }
677  [79]=>
678  array(3) {
679    [0]=>
680    int(%d)
681    [1]=>
682    string(5) "class"
683    [2]=>
684    int(16)
685  }
686  [80]=>
687  array(3) {
688    [0]=>
689    int(%d)
690    [1]=>
691    string(1) " "
692    [2]=>
693    int(16)
694  }
695  [81]=>
696  array(3) {
697    [0]=>
698    int(%d)
699    [1]=>
700    string(10) "ChildClass"
701    [2]=>
702    int(16)
703  }
704  [82]=>
705  array(3) {
706    [0]=>
707    int(%d)
708    [1]=>
709    string(1) " "
710    [2]=>
711    int(16)
712  }
713  [83]=>
714  array(3) {
715    [0]=>
716    int(%d)
717    [1]=>
718    string(7) "extends"
719    [2]=>
720    int(16)
721  }
722  [84]=>
723  array(3) {
724    [0]=>
725    int(%d)
726    [1]=>
727    string(1) " "
728    [2]=>
729    int(16)
730  }
731  [85]=>
732  array(3) {
733    [0]=>
734    int(%d)
735    [1]=>
736    string(7) "MyClass"
737    [2]=>
738    int(16)
739  }
740  [86]=>
741  array(3) {
742    [0]=>
743    int(%d)
744    [1]=>
745    string(1) " "
746    [2]=>
747    int(16)
748  }
749  [87]=>
750  array(3) {
751    [0]=>
752    int(%d)
753    [1]=>
754    string(10) "implements"
755    [2]=>
756    int(16)
757  }
758  [88]=>
759  array(3) {
760    [0]=>
761    int(%d)
762    [1]=>
763    string(1) " "
764    [2]=>
765    int(16)
766  }
767  [89]=>
768  array(3) {
769    [0]=>
770    int(%d)
771    [1]=>
772    string(11) "MyInterface"
773    [2]=>
774    int(16)
775  }
776  [90]=>
777  array(3) {
778    [0]=>
779    int(%d)
780    [1]=>
781    string(1) "
782"
783    [2]=>
784    int(16)
785  }
786  [91]=>
787  string(1) "{"
788  [92]=>
789  array(3) {
790    [0]=>
791    int(%d)
792    [1]=>
793    string(3) "
794  "
795    [2]=>
796    int(17)
797  }
798  [93]=>
799  array(3) {
800    [0]=>
801    int(%d)
802    [1]=>
803    string(6) "global"
804    [2]=>
805    int(18)
806  }
807  [94]=>
808  array(3) {
809    [0]=>
810    int(%d)
811    [1]=>
812    string(1) " "
813    [2]=>
814    int(18)
815  }
816  [95]=>
817  array(3) {
818    [0]=>
819    int(%d)
820    [1]=>
821    string(6) "$value"
822    [2]=>
823    int(18)
824  }
825  [96]=>
826  string(1) ";"
827  [97]=>
828  array(3) {
829    [0]=>
830    int(%d)
831    [1]=>
832    string(3) "
833  "
834    [2]=>
835    int(18)
836  }
837  [98]=>
838  array(3) {
839    [0]=>
840    int(%d)
841    [1]=>
842    string(8) "function"
843    [2]=>
844    int(19)
845  }
846  [99]=>
847  array(3) {
848    [0]=>
849    int(%d)
850    [1]=>
851    string(1) " "
852    [2]=>
853    int(19)
854  }
855  [100]=>
856  array(3) {
857    [0]=>
858    int(%d)
859    [1]=>
860    string(10) "myFunction"
861    [2]=>
862    int(19)
863  }
864  [101]=>
865  string(1) "("
866  [102]=>
867  array(3) {
868    [0]=>
869    int(%d)
870    [1]=>
871    string(2) "$a"
872    [2]=>
873    int(19)
874  }
875  [103]=>
876  string(1) ")"
877  [104]=>
878  array(3) {
879    [0]=>
880    int(%d)
881    [1]=>
882    string(3) "
883  "
884    [2]=>
885    int(19)
886  }
887  [105]=>
888  string(1) "{"
889  [106]=>
890  array(3) {
891    [0]=>
892    int(%d)
893    [1]=>
894    string(5) "
895    "
896    [2]=>
897    int(20)
898  }
899  [107]=>
900  array(3) {
901    [0]=>
902    int(%d)
903    [1]=>
904    string(2) "$a"
905    [2]=>
906    int(21)
907  }
908  [108]=>
909  array(3) {
910    [0]=>
911    int(%d)
912    [1]=>
913    string(1) " "
914    [2]=>
915    int(21)
916  }
917  [109]=>
918  string(1) "="
919  [110]=>
920  array(3) {
921    [0]=>
922    int(%d)
923    [1]=>
924    string(1) " "
925    [2]=>
926    int(21)
927  }
928  [111]=>
929  array(3) {
930    [0]=>
931    int(%d)
932    [1]=>
933    string(3) "new"
934    [2]=>
935    int(21)
936  }
937  [112]=>
938  array(3) {
939    [0]=>
940    int(%d)
941    [1]=>
942    string(1) " "
943    [2]=>
944    int(21)
945  }
946  [113]=>
947  array(3) {
948    [0]=>
949    int(%d)
950    [1]=>
951    string(10) "ChildClass"
952    [2]=>
953    int(21)
954  }
955  [114]=>
956  string(1) "("
957  [115]=>
958  string(1) ")"
959  [116]=>
960  string(1) ";"
961  [117]=>
962  array(3) {
963    [0]=>
964    int(%d)
965    [1]=>
966    string(5) "
967    "
968    [2]=>
969    int(21)
970  }
971  [118]=>
972  array(3) {
973    [0]=>
974    int(%d)
975    [1]=>
976    string(2) "if"
977    [2]=>
978    int(22)
979  }
980  [119]=>
981  string(1) "("
982  [120]=>
983  array(3) {
984    [0]=>
985    int(%d)
986    [1]=>
987    string(2) "$a"
988    [2]=>
989    int(22)
990  }
991  [121]=>
992  array(3) {
993    [0]=>
994    int(%d)
995    [1]=>
996    string(1) " "
997    [2]=>
998    int(22)
999  }
1000  [122]=>
1001  array(3) {
1002    [0]=>
1003    int(%d)
1004    [1]=>
1005    string(10) "instanceof"
1006    [2]=>
1007    int(22)
1008  }
1009  [123]=>
1010  array(3) {
1011    [0]=>
1012    int(%d)
1013    [1]=>
1014    string(1) " "
1015    [2]=>
1016    int(22)
1017  }
1018  [124]=>
1019  array(3) {
1020    [0]=>
1021    int(%d)
1022    [1]=>
1023    string(7) "MyClass"
1024    [2]=>
1025    int(22)
1026  }
1027  [125]=>
1028  string(1) ")"
1029  [126]=>
1030  array(3) {
1031    [0]=>
1032    int(%d)
1033    [1]=>
1034    string(7) "
1035      "
1036    [2]=>
1037    int(22)
1038  }
1039  [127]=>
1040  array(3) {
1041    [0]=>
1042    int(%d)
1043    [1]=>
1044    string(4) "echo"
1045    [2]=>
1046    int(23)
1047  }
1048  [128]=>
1049  array(3) {
1050    [0]=>
1051    int(%d)
1052    [1]=>
1053    string(1) " "
1054    [2]=>
1055    int(23)
1056  }
1057  [129]=>
1058  array(3) {
1059    [0]=>
1060    int(%d)
1061    [1]=>
1062    string(16) ""object created""
1063    [2]=>
1064    int(23)
1065  }
1066  [130]=>
1067  string(1) ";"
1068  [131]=>
1069  array(3) {
1070    [0]=>
1071    int(%d)
1072    [1]=>
1073    string(3) "
1074  "
1075    [2]=>
1076    int(23)
1077  }
1078  [132]=>
1079  string(1) "}"
1080  [133]=>
1081  array(3) {
1082    [0]=>
1083    int(%d)
1084    [1]=>
1085    string(1) "
1086"
1087    [2]=>
1088    int(24)
1089  }
1090  [134]=>
1091  string(1) "}"
1092  [135]=>
1093  array(3) {
1094    [0]=>
1095    int(%d)
1096    [1]=>
1097    string(1) "
1098"
1099    [2]=>
1100    int(25)
1101  }
1102  [136]=>
1103  array(3) {
1104    [0]=>
1105    int(%d)
1106    [1]=>
1107    string(10) "ChildClass"
1108    [2]=>
1109    int(26)
1110  }
1111  [137]=>
1112  array(3) {
1113    [0]=>
1114    int(%d)
1115    [1]=>
1116    string(2) "::"
1117    [2]=>
1118    int(26)
1119  }
1120  [138]=>
1121  array(3) {
1122    [0]=>
1123    int(%d)
1124    [1]=>
1125    string(10) "myFunction"
1126    [2]=>
1127    int(26)
1128  }
1129  [139]=>
1130  string(1) "("
1131  [140]=>
1132  array(3) {
1133    [0]=>
1134    int(%d)
1135    [1]=>
1136    string(2) "10"
1137    [2]=>
1138    int(26)
1139  }
1140  [141]=>
1141  string(1) ")"
1142  [142]=>
1143  string(1) ";"
1144  [143]=>
1145  array(3) {
1146    [0]=>
1147    int(%d)
1148    [1]=>
1149    string(1) "
1150"
1151    [2]=>
1152    int(26)
1153  }
1154  [144]=>
1155  array(3) {
1156    [0]=>
1157    int(%d)
1158    [1]=>
1159    string(2) "?>"
1160    [2]=>
1161    int(27)
1162  }
1163}
1164Done
1165