1--TEST-- 2Test usort() function : object functionality - different number of properties 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 have a different number of properties 12 * to test behaviour of usort() 13 */ 14 15echo "*** Testing usort() : object functionality ***\n"; 16 17function simple_cmp($value1, $value2) 18{ 19 if($value1 == $value2) { 20 return 0; 21 } 22 else if($value1 > $value2) { 23 return 1; 24 } 25 else 26 return -1; 27} 28 29// comparison function for SimpleClass2 objects which has more than one member 30function multiple_cmp($value1, $value2) 31{ 32 if($value1->getValue() == $value2->getValue()) 33 return 0; 34 else if($value1->getValue() > $value2->getValue()) 35 return 1; 36 else 37 return -1; 38} 39 40// Simple class with single property 41class SimpleClass1 42{ 43 private $int_value; 44 45 public function __construct($value) { 46 $this->int_value = $value; 47 } 48} 49 50// Simple class with more than one property 51class SimpleClass2 52{ 53 private $int_value; 54 protected $float_value; 55 public $string_value; 56 public function __construct($int, $float, $str) { 57 $this->int_value = $int; 58 $this->float_value = $float; 59 $this->string_value = $str; 60 } 61 public function getValue() { 62 return $this->int_value; 63 } 64} 65 66// array of SimpleClass objects with only one property 67$array_arg = array( 680 => new SimpleClass1(10), 691 => new SimpleClass1(1), 702 => new SimpleClass1(100), 713 => new SimpleClass1(50) 72); 73var_dump( usort($array_arg, 'simple_cmp') ); 74var_dump($array_arg); 75 76// array of SimpleClass objects having more than one properties 77$array_arg = array( 780 => new SimpleClass2(2, 3.4, "mango"), 791 => new SimpleClass2(10, 1.2, "apple"), 802 => new SimpleClass2(5, 2.5, "orange"), 81); 82var_dump( usort($array_arg, 'multiple_cmp') ); 83var_dump($array_arg); 84?> 85===DONE=== 86--EXPECTF-- 87*** Testing usort() : object functionality *** 88bool(true) 89array(4) { 90 [0]=> 91 object(SimpleClass1)#%d (1) { 92 ["int_value":"SimpleClass1":private]=> 93 int(1) 94 } 95 [1]=> 96 object(SimpleClass1)#%d (1) { 97 ["int_value":"SimpleClass1":private]=> 98 int(10) 99 } 100 [2]=> 101 object(SimpleClass1)#%d (1) { 102 ["int_value":"SimpleClass1":private]=> 103 int(50) 104 } 105 [3]=> 106 object(SimpleClass1)#%d (1) { 107 ["int_value":"SimpleClass1":private]=> 108 int(100) 109 } 110} 111bool(true) 112array(3) { 113 [0]=> 114 object(SimpleClass2)#%d (3) { 115 ["int_value":"SimpleClass2":private]=> 116 int(2) 117 ["float_value":protected]=> 118 float(3.4) 119 ["string_value"]=> 120 string(5) "mango" 121 } 122 [1]=> 123 object(SimpleClass2)#%d (3) { 124 ["int_value":"SimpleClass2":private]=> 125 int(5) 126 ["float_value":protected]=> 127 float(2.5) 128 ["string_value"]=> 129 string(6) "orange" 130 } 131 [2]=> 132 object(SimpleClass2)#%d (3) { 133 ["int_value":"SimpleClass2":private]=> 134 int(10) 135 ["float_value":protected]=> 136 float(1.2) 137 ["string_value"]=> 138 string(5) "apple" 139 } 140} 141===DONE=== 142