Return to usort_object1.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / array |
1.1 misho 1: --TEST-- 2: Test 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: 15: echo "*** Testing usort() : object functionality ***\n"; 16: 17: function 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 30: function 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 41: class 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 51: class 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( 68: 0 => new SimpleClass1(10), 69: 1 => new SimpleClass1(1), 70: 2 => new SimpleClass1(100), 71: 3 => new SimpleClass1(50) 72: ); 73: var_dump( usort($array_arg, 'simple_cmp') ); 74: var_dump($array_arg); 75: 76: // array of SimpleClass objects having more than one properties 77: $array_arg = array( 78: 0 => new SimpleClass2(2, 3.4, "mango"), 79: 1 => new SimpleClass2(10, 1.2, "apple"), 80: 2 => new SimpleClass2(5, 2.5, "orange"), 81: ); 82: var_dump( usort($array_arg, 'multiple_cmp') ); 83: var_dump($array_arg); 84: ?> 85: ===DONE=== 86: --EXPECTF-- 87: *** Testing usort() : object functionality *** 88: bool(true) 89: array(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: } 111: bool(true) 112: array(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===