1--TEST--
2Test usort() function : object functionality - Different types of classes
3--FILE--
4<?php
5/* Prototype  : bool usort(array $array_arg, string $cmp_function)
6 * Description: Sort an array by values using a user-defined comparison function
7 * Source code: ext/standard/array.c
8 */
9
10/*
11 * Pass an array of objects which are either:
12 * 1. Empty
13 * 2. Static
14 * 2. Inherited
15 * to test behaviour of usort()
16 */
17
18echo "*** Testing usort() : object functionality ***\n";
19
20function cmp_function($value1, $value2)
21{
22  if($value1 == $value2) {
23    return 0;
24  }
25  else if($value1 > $value2) {
26    return 1;
27  }
28  else
29    return -1;
30}
31
32// Class without any member
33class EmptyClass
34{
35}
36
37// Class with static member
38class StaticClass
39{
40  public static $static_value;
41  public function __construct($value) {
42    StaticClass::$static_value = $value;
43  }
44}
45
46// Abstract class
47abstract class AbstractClass
48{
49  public $pub_value;
50  public abstract function abstractMethod();
51}
52
53// Child class extending abstract class
54class ChildClass extends AbstractClass
55{
56  public $child_value = 100;
57  public function abstractMethod() {
58    $pub_value = 5;
59  }
60  public function __construct($value) {
61    $this->child_value = $value;
62  }
63}
64
65// Testing uasort with StaticClass objects as elements of 'array_arg'
66echo "-- Testing usort() with StaticClass objects --\n";
67$array_arg = array(
68  0 => new StaticClass(20),
69  1 => new StaticClass(50),
70  2 => new StaticClass(15),
71  3 => new StaticClass(70),
72);
73var_dump( usort($array_arg, 'cmp_function') );
74var_dump($array_arg);
75
76// Testing uasort with EmptyClass objects as elements of 'array_arg'
77echo "-- Testing usort() with EmptyClass objects --\n";
78$array_arg = array(
79  0 => new EmptyClass(),
80  1 => new EmptyClass(),
81  2 => new EmptyClass(),
82  3 => new EmptyClass(),
83);
84var_dump( usort($array_arg, 'cmp_function') );
85var_dump($array_arg);
86
87// Testing uasort with ChildClass objects as elements of 'array_arg'
88echo "-- Testing usort() with ChildClass objects --\n";
89$array_arg = array(
90  0 => new ChildClass(20),
91  1 => new ChildClass(500),
92  2 => new ChildClass(15),
93  3 => new ChildClass(700),
94);
95var_dump( usort($array_arg, 'cmp_function') );
96var_dump($array_arg);
97?>
98===DONE===
99--EXPECTF--
100*** Testing usort() : object functionality ***
101-- Testing usort() with StaticClass objects --
102bool(true)
103array(4) {
104  [0]=>
105  object(StaticClass)#%d (0) {
106  }
107  [1]=>
108  object(StaticClass)#%d (0) {
109  }
110  [2]=>
111  object(StaticClass)#%d (0) {
112  }
113  [3]=>
114  object(StaticClass)#%d (0) {
115  }
116}
117-- Testing usort() with EmptyClass objects --
118bool(true)
119array(4) {
120  [0]=>
121  object(EmptyClass)#%d (0) {
122  }
123  [1]=>
124  object(EmptyClass)#%d (0) {
125  }
126  [2]=>
127  object(EmptyClass)#%d (0) {
128  }
129  [3]=>
130  object(EmptyClass)#%d (0) {
131  }
132}
133-- Testing usort() with ChildClass objects --
134bool(true)
135array(4) {
136  [0]=>
137  object(ChildClass)#%d (2) {
138    ["child_value"]=>
139    int(15)
140    ["pub_value"]=>
141    NULL
142  }
143  [1]=>
144  object(ChildClass)#%d (2) {
145    ["child_value"]=>
146    int(20)
147    ["pub_value"]=>
148    NULL
149  }
150  [2]=>
151  object(ChildClass)#%d (2) {
152    ["child_value"]=>
153    int(500)
154    ["pub_value"]=>
155    NULL
156  }
157  [3]=>
158  object(ChildClass)#%d (2) {
159    ["child_value"]=>
160    int(700)
161    ["pub_value"]=>
162    NULL
163  }
164}
165===DONE===