1--TEST--
2Test get_class_methods() function : basic functionality
3--FILE--
4<?php
5/* Prototype  : proto array get_class_methods(mixed class)
6 * Description: Returns an array of method names for class or class instance.
7 * Source code: Zend/zend_builtin_functions.c
8 * Alias to functions:
9 */
10
11/*
12 * Test behaviour with various visibility levels.
13 */
14
15class C {
16	private function privC() {}
17	protected function protC() {}
18	public function pubC() {}
19
20	public static function testFromC() {
21		echo "Accessing C from C:\n";
22		var_dump(get_class_methods("C"));
23		echo "Accessing D from C:\n";
24		var_dump(get_class_methods("D"));
25		echo "Accessing X from C:\n";
26		var_dump(get_class_methods("X"));
27	}
28}
29
30class D extends C {
31	private function privD() {}
32	protected function protD() {}
33	public function pubD() {}
34
35	public static function testFromD() {
36		echo "Accessing C from D:\n";
37		var_dump(get_class_methods("C"));
38		echo "Accessing D from D:\n";
39		var_dump(get_class_methods("D"));
40		echo "Accessing X from D:\n";
41		var_dump(get_class_methods("X"));
42	}
43}
44
45class X {
46	private function privX() {}
47	protected function protX() {}
48	public function pubX() {}
49
50	public static function testFromX() {
51		echo "Accessing C from X:\n";
52		var_dump(get_class_methods("C"));
53		echo "Accessing D from X:\n";
54		var_dump(get_class_methods("D"));
55		echo "Accessing X from X:\n";
56		var_dump(get_class_methods("X"));
57	}
58}
59
60echo "Accessing D from global scope:\n";
61var_dump(get_class_methods("D"));
62
63C::testFromC();
64D::testFromD();
65X::testFromX();
66
67echo "Done";
68?>
69--EXPECT--
70Accessing D from global scope:
71array(4) {
72  [0]=>
73  string(4) "pubD"
74  [1]=>
75  string(9) "testFromD"
76  [2]=>
77  string(4) "pubC"
78  [3]=>
79  string(9) "testFromC"
80}
81Accessing C from C:
82array(4) {
83  [0]=>
84  string(5) "privC"
85  [1]=>
86  string(5) "protC"
87  [2]=>
88  string(4) "pubC"
89  [3]=>
90  string(9) "testFromC"
91}
92Accessing D from C:
93array(7) {
94  [0]=>
95  string(5) "protD"
96  [1]=>
97  string(4) "pubD"
98  [2]=>
99  string(9) "testFromD"
100  [3]=>
101  string(5) "privC"
102  [4]=>
103  string(5) "protC"
104  [5]=>
105  string(4) "pubC"
106  [6]=>
107  string(9) "testFromC"
108}
109Accessing X from C:
110array(2) {
111  [0]=>
112  string(4) "pubX"
113  [1]=>
114  string(9) "testFromX"
115}
116Accessing C from D:
117array(3) {
118  [0]=>
119  string(5) "protC"
120  [1]=>
121  string(4) "pubC"
122  [2]=>
123  string(9) "testFromC"
124}
125Accessing D from D:
126array(7) {
127  [0]=>
128  string(5) "privD"
129  [1]=>
130  string(5) "protD"
131  [2]=>
132  string(4) "pubD"
133  [3]=>
134  string(9) "testFromD"
135  [4]=>
136  string(5) "protC"
137  [5]=>
138  string(4) "pubC"
139  [6]=>
140  string(9) "testFromC"
141}
142Accessing X from D:
143array(2) {
144  [0]=>
145  string(4) "pubX"
146  [1]=>
147  string(9) "testFromX"
148}
149Accessing C from X:
150array(2) {
151  [0]=>
152  string(4) "pubC"
153  [1]=>
154  string(9) "testFromC"
155}
156Accessing D from X:
157array(4) {
158  [0]=>
159  string(4) "pubD"
160  [1]=>
161  string(9) "testFromD"
162  [2]=>
163  string(4) "pubC"
164  [3]=>
165  string(9) "testFromC"
166}
167Accessing X from X:
168array(4) {
169  [0]=>
170  string(5) "privX"
171  [1]=>
172  string(5) "protX"
173  [2]=>
174  string(4) "pubX"
175  [3]=>
176  string(9) "testFromX"
177}
178Done
179