Complex classes like WPSC_Purchase_Log_Notes often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use WPSC_Purchase_Log_Notes, and based on these observations, apply Extract Interface, too.
| 1 | <?php  | 
            ||
| 3 | class WPSC_Purchase_Log_Notes extends WPSC_Query_Base implements Iterator { | 
            ||
| 4 | const TYPE_DEFAULT = 0;  | 
            ||
| 5 | const TYPE_ERROR = 1;  | 
            ||
| 6 | const STATUS_PUBLIC = 0;  | 
            ||
| 7 | const STATUS_PRIVATE = 1;  | 
            ||
| 8 | const KEY_CONTENT = 0;  | 
            ||
| 9 | const KEY_STATUS = 1;  | 
            ||
| 10 | const KEY_TIME = 2;  | 
            ||
| 11 | const KEY_TYPE = 3;  | 
            ||
| 12 | |||
| 13 | protected static $map_types = array(  | 
            ||
| 14 | self::TYPE_DEFAULT => 'default',  | 
            ||
| 15 | self::TYPE_ERROR => 'error',  | 
            ||
| 16 | );  | 
            ||
| 17 | |||
| 18 | protected static $map_statuses = array(  | 
            ||
| 19 | self::STATUS_PUBLIC => 'public',  | 
            ||
| 20 | self::STATUS_PRIVATE => 'private',  | 
            ||
| 21 | );  | 
            ||
| 22 | |||
| 23 | protected static $map_keys = array(  | 
            ||
| 24 | self::KEY_TYPE => 'type',  | 
            ||
| 25 | self::KEY_STATUS => 'status',  | 
            ||
| 26 | self::KEY_TIME => 'time',  | 
            ||
| 27 | self::KEY_CONTENT => 'content',  | 
            ||
| 28 | );  | 
            ||
| 29 | |||
| 30 | protected static $map_text = array();  | 
            ||
| 31 | protected $log = null;  | 
            ||
| 32 | |||
| 33 | 	public function __construct( $log ) { | 
            ||
| 53 | |||
| 54 | /**  | 
            ||
| 55 | * Fetches the actual record from the database  | 
            ||
| 56 | *  | 
            ||
| 57 | * @access protected  | 
            ||
| 58 | * @since 3.8.9  | 
            ||
| 59 | *  | 
            ||
| 60 | * @return WPSC_Purchase_Log  | 
            ||
| 61 | */  | 
            ||
| 62 | 	protected function fetch() { | 
            ||
| 172 | |||
| 173 | /**  | 
            ||
| 174 | * Prepares the return value for get() (apply_filters, etc).  | 
            ||
| 175 | *  | 
            ||
| 176 | * @access protected  | 
            ||
| 177 | * @since 4.0  | 
            ||
| 178 | *  | 
            ||
| 179 | * @param mixed $value Value fetched  | 
            ||
| 180 | * @param string $key Key for $data.  | 
            ||
| 181 | *  | 
            ||
| 182 | * @return mixed  | 
            ||
| 183 | */  | 
            ||
| 184 | 	protected function prepare_get( $value, $key ) { | 
            ||
| 187 | |||
| 188 | /**  | 
            ||
| 189 | * Prepares the return value for get_data() (apply_filters, etc).  | 
            ||
| 190 | *  | 
            ||
| 191 | * @access protected  | 
            ||
| 192 | * @since 4.0  | 
            ||
| 193 | *  | 
            ||
| 194 | * @return mixed  | 
            ||
| 195 | */  | 
            ||
| 196 | 	protected function prepare_get_data() { | 
            ||
| 199 | |||
| 200 | 	public function add( $note_args ) { | 
            ||
| 207 | |||
| 208 | 	public function remove( $note_id ) { | 
            ||
| 214 | |||
| 215 | /**  | 
            ||
| 216 | * Sets a property to a certain value. This function accepts a key and a value  | 
            ||
| 217 | * as arguments, or an associative array containing key value pairs.  | 
            ||
| 218 | *  | 
            ||
| 219 | * @access public  | 
            ||
| 220 | * @since 4.0  | 
            ||
| 221 | *  | 
            ||
| 222 | * @param mixed $key Name of the property (column), or an array containing  | 
            ||
| 223 | * key value pairs  | 
            ||
| 224 | * @param string|int|null $value Optional. Defaults to null. In case $key is a string,  | 
            ||
| 225 | * this should be specified.  | 
            ||
| 226 | * @return WPSC_Query_Base The current object (for method chaining)  | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 227 | */  | 
            ||
| 228 | 	public function set( $key, $value = null ) { | 
            ||
| 249 | |||
| 250 | /**  | 
            ||
| 251 | * Saves the object back to the database.  | 
            ||
| 252 | *  | 
            ||
| 253 | * @access public  | 
            ||
| 254 | * @since 4.0  | 
            ||
| 255 | *  | 
            ||
| 256 | * @return mixed  | 
            ||
| 257 | */  | 
            ||
| 258 | 	public function save() { | 
            ||
| 311 | |||
| 312 | /**  | 
            ||
| 313 | * Merge arguments into defaults array.  | 
            ||
| 314 | *  | 
            ||
| 315 | * @since 4.0  | 
            ||
| 316 | *  | 
            ||
| 317 | * @param array $args Value to merge with defaults.  | 
            ||
| 318 | * @return array Merged arguments with defaults.  | 
            ||
| 319 | */  | 
            ||
| 320 | 	public static function parse_args_for_db( array $args ) { | 
            ||
| 328 | |||
| 329 | /**  | 
            ||
| 330 | * Merge arguments into defaults array.  | 
            ||
| 331 | *  | 
            ||
| 332 | * @since 4.0  | 
            ||
| 333 | *  | 
            ||
| 334 | * @param array $args Value to merge with defaults.  | 
            ||
| 335 | * @return array Merged arguments with defaults.  | 
            ||
| 336 | */  | 
            ||
| 337 | 	public static function parse_args( array $args ) { | 
            ||
| 345 | |||
| 346 | /**  | 
            ||
| 347 | * Get current for Iterator.  | 
            ||
| 348 | *  | 
            ||
| 349 | * @since 4.0  | 
            ||
| 350 | *  | 
            ||
| 351 | * @return mixed  | 
            ||
| 352 | */  | 
            ||
| 353 | 	public function current() { | 
            ||
| 357 | |||
| 358 | /**  | 
            ||
| 359 | * Get key for Iterator.  | 
            ||
| 360 | *  | 
            ||
| 361 | * @since 4.0  | 
            ||
| 362 | *  | 
            ||
| 363 | * @return scalar  | 
            ||
| 364 | */  | 
            ||
| 365 | 	public function key() { | 
            ||
| 369 | |||
| 370 | /**  | 
            ||
| 371 | * Get next for Iterator.  | 
            ||
| 372 | *  | 
            ||
| 373 | * @since 4.0  | 
            ||
| 374 | *  | 
            ||
| 375 | * @return void  | 
            ||
| 376 | */  | 
            ||
| 377 | 	public function next() { | 
            ||
| 381 | |||
| 382 | /**  | 
            ||
| 383 | * Get prev for Iterator.  | 
            ||
| 384 | *  | 
            ||
| 385 | * @since 4.0  | 
            ||
| 386 | *  | 
            ||
| 387 | * @return void  | 
            ||
| 388 | */  | 
            ||
| 389 | 	public function prev() { | 
            ||
| 393 | |||
| 394 | /**  | 
            ||
| 395 | * Get rewind for Iterator.  | 
            ||
| 396 | *  | 
            ||
| 397 | * @since 4.0  | 
            ||
| 398 | *  | 
            ||
| 399 | * @return void  | 
            ||
| 400 | */  | 
            ||
| 401 | 	public function rewind() { | 
            ||
| 405 | |||
| 406 | /**  | 
            ||
| 407 | * Get valid for Iterator.  | 
            ||
| 408 | *  | 
            ||
| 409 | * @since 4.0  | 
            ||
| 410 | *  | 
            ||
| 411 | * @return boolean  | 
            ||
| 412 | */  | 
            ||
| 413 | 	public function valid() { | 
            ||
| 417 | |||
| 418 | |||
| 419 | 	public function get_status_text( $note = array() ) { | 
            ||
| 430 | |||
| 431 | 	public function get_formatted_date( $note = array() ) { | 
            ||
| 446 | |||
| 447 | }  | 
            ||
| 448 | 
This check looks for the generic type
arrayas a return type and suggests a more specific type. This type is inferred from the actual code.