Bakudan
Bakudan

Reputation: 19492

Remove case from code

config.php

define('DB_TYPE', 'MYSQL');

dbManager.php

incude_once('config.php');
switch ( DB_TYPE ) {
   case 'MYSQL':    $this->_dataObject = MySqlDB::_getInstance();   break;
   case 'PGSQL':    $this->_dataObject = PostgreDB::_getInstance(); break;
   case 'SQLITE':   $this->_dataObject = SqliteDB::_getInstance();  break;
}

Can this piece of code be rewritten without the case? Something like:

$this->_dataObject = DB_TYPE::_getInstance();

This gives me an error Fatal error: Class 'DB_TYPE' not found .... in line ...

Upvotes: 1

Views: 108

Answers (3)

Deebster
Deebster

Reputation: 2839

$dbClasses = array(
    'MYSQL' => 'MySqlDB',
    'PGSQL' => 'PostgreDB',
    'SQLITE'=> 'SqliteDB',
};

$dbClass = $dbClasses[DB_TYPE];

$this->_dataObject = $dbClass::_getInstance();

Upvotes: 0

Mchl
Mchl

Reputation: 62377

Try:

$c = TYPE;
$this->_dataObject = $c::_getInstance();

however, this code looks like it could benefit from dependency injection

class YourClass {

  public function __construct(DataObject $dataObject) {
    $this->_dataObject = $dataObject;
  }

}

then pass the dataobject to your class while instantiating it

Upvotes: 0

neworld
neworld

Reputation: 7793

maybe

$DBClassName = 'MySqlDB';
$this->_dataObject = $DBClassName::_getInstance();

Upvotes: 2

Related Questions