1--TEST--
2Test array_filter() function : object functionality
3--FILE--
4<?php
5/* Prototype  : array array_filter(array $input [, callback $callback])
6 * Description: Filters elements from the array via the callback.
7 * Source code: ext/standard/array.c
8*/
9
10/* This file uses 'input' array with different types of objects and passes
11 * it to array_filter() to test object functionality
12 * i.e. object of simple class with members and functions
13 * object of empty class
14 * object of child class extending abstract class
15 * object of class containing static member
16 */
17
18echo "*** Testing array_filter() : object functionality ***\n";
19
20// simple class with members - variable and method
21class SimpleClass
22{
23  public $var1 = 10;
24  public function check() {
25    return $var1;
26  }
27}
28
29// class without members
30class EmptyClass
31{
32}
33
34// abstract class
35abstract class AbstractClass
36{
37  protected $var2 = 5;
38  abstract function emptyMethod();
39}
40
41// class deriving above abstract class
42class ChildClass extends AbstractClass
43{
44  private $var3;
45  public function emptyMethod() {
46    echo "defined in child";
47  }
48}
49
50// class with final method
51class FinalClass
52{
53  private $var4;
54  final function finalMethod() {
55    echo 'This can not be overloaded';
56  }
57}
58
59// class with static members
60class StaticClass
61{
62  static $var5 = 5;
63  public static function staticMethod() {
64    echo 'this is static method';
65  }
66}
67
68// Callback function which returns always true
69function always_true($input)
70{
71  return true;
72}
73
74// Callback function which returns always false
75function always_false($input)
76{
77  return false;
78}
79
80// 'input' array containing objects as elements
81$input = array(
82  new SimpleClass(),
83  new EmptyClass(),
84  new ChildClass(),
85  new FinalClass(),
86  new StaticClass()
87);
88
89
90// with default callback
91var_dump( array_filter($input) );
92
93// with always_true callback function
94var_dump( array_filter($input, "always_true") );
95
96// with always_false callback function
97var_dump( array_filter($input, "always_false") );
98
99echo "Done"
100?>
101--EXPECTF--
102*** Testing array_filter() : object functionality ***
103array(5) {
104  [0]=>
105  object(SimpleClass)#%d (1) {
106    ["var1"]=>
107    int(10)
108  }
109  [1]=>
110  object(EmptyClass)#%d (0) {
111  }
112  [2]=>
113  object(ChildClass)#%d (2) {
114    ["var3":"ChildClass":private]=>
115    NULL
116    ["var2":protected]=>
117    int(5)
118  }
119  [3]=>
120  object(FinalClass)#%d (1) {
121    ["var4":"FinalClass":private]=>
122    NULL
123  }
124  [4]=>
125  object(StaticClass)#%d (0) {
126  }
127}
128array(5) {
129  [0]=>
130  object(SimpleClass)#%d (1) {
131    ["var1"]=>
132    int(10)
133  }
134  [1]=>
135  object(EmptyClass)#%d (0) {
136  }
137  [2]=>
138  object(ChildClass)#%d (2) {
139    ["var3":"ChildClass":private]=>
140    NULL
141    ["var2":protected]=>
142    int(5)
143  }
144  [3]=>
145  object(FinalClass)#%d (1) {
146    ["var4":"FinalClass":private]=>
147    NULL
148  }
149  [4]=>
150  object(StaticClass)#%d (0) {
151  }
152}
153array(0) {
154}
155Done
156