UPDATE: Rephrasing the question to ask, 'are there too many' static methods (I realize that right now there are only 4 but I originally started with 2) in this class structure? If so, any suggestions on how to refactor these classes to use some sort of Finder class so that I can remove the static functions from the Model classes?
I have the following abstract class:
abstract class LP_Model_Abstract
{
protected static $_collectionClass = 'LP_Model_Collection';
protected $_row = null;
protected $_data = array();
public function __construct($row = null)
{
 $this->_row = $row;
}
public function __get($key)
{
 if(method_exists($this, '_get' . ucfirst($key)))
 {
  $method = '_get' . ucfirst($key);
  return $this->$method();   
 }
 elseif(isset($this->_row->$key))
 {
  return $this->_row->$key;
 }
 else
 {
  foreach($this->_data as $gateway)
  {
   if(isset($gateway->$key))
   {
    return $gateway->$key;
   }
  }
 } 
}
public function __set($key, $val)
{
 if(method_exists($this, '_set' . ucfirst($key)))
 {
  $method = '_set' . ucfirst($key);
  return $this->$method($val);   
 }
 elseif(isset($this->_row->$key))
 {
  $this->_row->$key = $val;
  return $this->_row->$key;
 }
 else
 {
  foreach($this->_data as $gateway)
  {
   if(isset($this->_data[$gateway]->$key))
   {
    $this->_data[$gateway]->$key = $val;
    return $this->_data[$gateway]->$key;
   }
  }
 }
}
public function __isset($key)
{
 return isset($this->_row->$key);
}
public function save()
{
 $this->_row->save();
}
abstract public static function get($params);
abstract public static function getCollection($params = null);
abstract public static function create($params);
}
And then this class which provides additional functionality for class table inheritance schemes (where type is important in determining additional functionality in a factory fashion):
abstract class LP_Model_Factory_Abstract extends LP_Model_Abstract
{
    protected static $_collectionClass = 'LP_Model_Collection_Factory';
    abstract public static function factory($row);
}
These ultimately result in the following type of class declaration:
class Model_Artifact extends LP_Model_Factory_Abstract
{
    protected static $_artifactGateway = 'Model_Table_Artifact';
    public static function create($params)
    {
    }
    public static function get($params) 
    {
     $gateway = new self::$_artifactGateway();
     $row = $gateway->fetchArtifact($params);
     return self::factory($row);        
    }
    public static function getCollection($params = null) 
    {
     $gateway = new self::$_artifactGateway();
     $rowset = $gateway->fetchArtifacts($params);
     $data = array(
      'data' => $rowset,
      'modelClass' => __CLASS__
     );
     return new self::$_collectionClass($data);
    }
    public static function factory($row)
    {
     $class = 'Model_Artifact_' . $row->fileType;
    }
}
When do you know that you have too many static methods in a class? And how would you refactor the existing design so that the static methods are perhaps encapsulated in some sort of Finder class?