1--TEST--
2Test array_map() function : usage variations - object functionality
3--FILE--
4<?php
5/* Prototype  : array array_map  ( callback $callback  , array $arr1  [, array $...  ] )
6 * Description: Applies the callback to the elements of the given arrays
7 * Source code: ext/standard/array.c
8 */
9
10/*
11 * Testing array_map() for object functionalities:
12 *   1) simple class with variable and method
13 *   2) class without members
14 *   3) class with only one method and no variable
15 *   4) abstract and child class
16 *   5) class with static and final members
17 *   6) interface and implemented class
18 */
19echo "*** Testing array_map() : object functionality ***\n";
20
21echo "-- simple class with public variable and method --\n";
22class SimpleClass
23{
24  public $var1 = 1;
25  public function square($n) {
26    return $n * $n;
27  }
28}
29function test($cb, $args) {
30  echo join('::', $cb) . "\n";
31  var_dump(array_map($cb, $args));
32}
33test(array('SimpleClass', 'square'), array(1, 2));
34
35echo "\n-- simple class with private variable and method --\n";
36class SimpleClassPri
37{
38  private $var1 = 10;
39  private function add($n) {
40    return $var + $n;
41  }
42}
43test(array('SimpleClassPri', 'add'), array(1));
44
45echo "\n-- simple class with protected variable and method --\n";
46class SimpleClassPro
47{
48  protected $var1 = 5;
49  protected function mul($n) {
50    return $var1 * $n;
51  }
52}
53test(array('SimpleClassPro', 'mul'), array(2));
54
55echo "\n-- class without members --\n";
56class EmptyClass
57{
58}
59test(array('EmptyClass'), array(1, 2));
60
61echo "\n-- abstract class --\n";
62abstract class AbstractClass
63{
64  protected $var2 = 5;
65  abstract function emptyFunction();
66}
67
68// class deriving the above abstract class
69class ChildClass extends AbstractClass
70{
71  private $var3;
72  public function emptyFunction() {
73    echo "defined in child\n";
74  }
75}
76test(array('ChildClass', 'emptyFunction'), array(1, 2));
77
78echo "\n-- class with final method --\n";
79class FinalClass
80{
81  private $var4;
82  final function finalMethod() {
83    echo "This function can't be overloaded\n";
84  }
85}
86test(array('FinalClass', 'finalMethod'), array(1, 2));
87
88echo "\n-- class with static members --\n";
89class StaticClass
90{
91  static $var5 = 2;
92  public static function square($n) {
93    return ($n * $n);
94  }
95  private static function cube($n) {
96    return ($n * $n * $n);
97  }
98  protected static function retVal($n)  {
99    return array($n);
100  }
101}
102test(array('StaticClass', 'square'), array(1, 2));
103test(array('StaticClass', 'cube'), array(2));
104test(array('StaticClass', 'retVal'), array(3, 4));
105
106echo "-- class implementing an interface --\n";
107interface myInterface
108{
109  public function toImplement();
110}
111class InterClass implements myInterface
112{
113  public static function square($n) {
114    return ($n * $n);
115  }
116  public function toImplement() {
117    return 1;
118  }
119}
120test(array('InterClass', 'square'), array(1, 2));
121
122?>
123===DONE===
124<?php exit(0); ?>
125--EXPECTF--
126*** Testing array_map() : object functionality ***
127-- simple class with public variable and method --
128SimpleClass::square
129
130Strict Standards: array_map() expects parameter 1 to be a valid callback, non-static method SimpleClass::square() should not be called statically in %sarray_map_object1.php on line %d
131array(2) {
132  [0]=>
133  int(1)
134  [1]=>
135  int(4)
136}
137
138-- simple class with private variable and method --
139SimpleClassPri::add
140
141Warning: array_map() expects parameter 1 to be a valid callback, cannot access private method SimpleClassPri::add() in %sarray_map_object1.php on line %d
142NULL
143
144-- simple class with protected variable and method --
145SimpleClassPro::mul
146
147Warning: array_map() expects parameter 1 to be a valid callback, cannot access protected method SimpleClassPro::mul() in %sarray_map_object1.php on line %d
148NULL
149
150-- class without members --
151EmptyClass
152
153Warning: array_map() expects parameter 1 to be a valid callback, array must have exactly two members in %sarray_map_object1.php on line %d
154NULL
155
156-- abstract class --
157ChildClass::emptyFunction
158
159Strict Standards: array_map() expects parameter 1 to be a valid callback, non-static method ChildClass::emptyFunction() should not be called statically in %sarray_map_object1.php on line %d
160defined in child
161defined in child
162array(2) {
163  [0]=>
164  NULL
165  [1]=>
166  NULL
167}
168
169-- class with final method --
170FinalClass::finalMethod
171
172Strict Standards: array_map() expects parameter 1 to be a valid callback, non-static method FinalClass::finalMethod() should not be called statically in %sarray_map_object1.php on line %d
173This function can't be overloaded
174This function can't be overloaded
175array(2) {
176  [0]=>
177  NULL
178  [1]=>
179  NULL
180}
181
182-- class with static members --
183StaticClass::square
184array(2) {
185  [0]=>
186  int(1)
187  [1]=>
188  int(4)
189}
190StaticClass::cube
191
192Warning: array_map() expects parameter 1 to be a valid callback, cannot access private method StaticClass::cube() in %sarray_map_object1.php on line %d
193NULL
194StaticClass::retVal
195
196Warning: array_map() expects parameter 1 to be a valid callback, cannot access protected method StaticClass::retVal() in %sarray_map_object1.php on line %d
197NULL
198-- class implementing an interface --
199InterClass::square
200array(2) {
201  [0]=>
202  int(1)
203  [1]=>
204  int(4)
205}
206===DONE===
207