CrossPHP
  • Namespace
  • Class
  • Download

Namespaces

  • Cross
    • Auth
    • Cache
      • Driver
      • Request
    • Core
    • DB
      • Connecter
      • Drivers
      • SQLAssembler
    • Exception
    • Http
    • I
    • Lib
      • Document
    • Module
    • MVC
    • Runtime
  • None

Classes

  • Cross\Auth\CookieAuth
  • Cross\Auth\SessionAuth
  • Cross\Cache\Driver\FileCacheDriver
  • Cross\Cache\Driver\MemcacheDriver
  • Cross\Cache\Driver\RedisDriver
  • Cross\Cache\Request\FileCache
  • Cross\Cache\Request\Memcache
  • Cross\Cache\Request\RedisCache
  • Cross\Cache\RequestCache
  • Cross\Core\Annotate
  • Cross\Core\Application
  • Cross\Core\ArrayMap
  • Cross\Core\Config
  • Cross\Core\CrossArray
  • Cross\Core\Delegate
  • Cross\Core\FrameBase
  • Cross\Core\Helper
  • Cross\Core\HttpAuth
  • Cross\Core\Loader
  • Cross\Core\Rest
  • Cross\Core\Router
  • Cross\DB\Connecter\BaseConnecter
  • Cross\DB\Connecter\MySQLConnecter
  • Cross\DB\Connecter\PgSQLConnecter
  • Cross\DB\Connecter\SQLiteConnecter
  • Cross\DB\DBFactory
  • Cross\DB\Drivers\CouchDriver
  • Cross\DB\Drivers\MongoDriver
  • Cross\DB\Drivers\PDOSqlDriver
  • Cross\DB\SQLAssembler\MySQLAssembler
  • Cross\DB\SQLAssembler\PgSQLAssembler
  • Cross\DB\SQLAssembler\SQLAssembler
  • Cross\DB\SQLAssembler\SQLiteAssembler
  • Cross\Http\Request
  • Cross\Http\Response
  • Cross\Lib\Array2XML
  • Cross\Lib\Document\CallTree
  • Cross\Lib\Document\CallTreeToHTML
  • Cross\Lib\Document\HTML
  • Cross\Lib\StringToPHPStream
  • Cross\Module\SQLModule
  • Cross\MVC\Controller
  • Cross\MVC\Module
  • Cross\MVC\View
  • Cross\Runtime\ClosureContainer

Interfaces

  • Cross\I\CacheInterface
  • Cross\I\HttpAuthInterface
  • Cross\I\PDOConnecter
  • Cross\I\RequestCacheInterface
  • Cross\I\RouterInterface
  • Cross\I\SqlInterface

Exceptions

  • Cross\Exception\CacheException
  • Cross\Exception\CoreException
  • Cross\Exception\CrossException
  • Cross\Exception\FrontException

Functions

  • ascLogo
  • line
  • tBody
  • th
  • tHead
  1 <?php
  2 /**
  3  * Cross - a micro PHP 5 framework
  4  *
  5  * @link        http://www.crossphp.com
  6  * @license     MIT License
  7  */
  8 namespace Cross\DB;
  9 
 10 use Cross\DB\SQLAssembler\MySQLAssembler;
 11 use Cross\DB\SQLAssembler\PgSQLAssembler;
 12 use Cross\DB\SQLAssembler\SQLiteAssembler;
 13 use Cross\DB\Connecter\MySQLConnecter;
 14 use Cross\DB\Connecter\PgSQLConnecter;
 15 use Cross\DB\Connecter\SQLiteConnecter;
 16 use Cross\Cache\Driver\MemcacheDriver;
 17 use Cross\Cache\Driver\RedisDriver;
 18 use Cross\DB\Drivers\PDOSqlDriver;
 19 use Cross\DB\Drivers\CouchDriver;
 20 use Cross\DB\Drivers\MongoDriver;
 21 use Cross\Exception\CoreException;
 22 use Closure;
 23 
 24 /**
 25  * @author wonli <wonli@live.com>
 26  * Class DBFactory
 27  * @package Cross\DB
 28  */
 29 class DBFactory
 30 {
 31     /**
 32      * 为module中的link生成对象的实例,在配置文件中支持匿名函数
 33      *
 34      * @param string $link
 35      * @param array|Closure $params
 36      * @param array $config
 37      * @return RedisDriver|CouchDriver|MongoDriver|PDOSqlDriver|mixed
 38      * @throws CoreException
 39      */
 40     static function make($link, $params, array $config = array())
 41     {
 42         //如果params是一个匿名函数, 则调用匿名函数创建数据库连接
 43         if ($params instanceof Closure) {
 44             return call_user_func_array($params, $config);
 45         }
 46 
 47         //配置的数据表前缀
 48         $prefix = !empty($params['prefix']) ? $params['prefix'] : '';
 49         $options = isset($params['options']) ? $params['options'] : array();
 50         switch (strtolower($link)) {
 51             case 'mysql' :
 52                 return new PDOSqlDriver(
 53                     MySQLConnecter::getInstance(self::getDsn($params, 'mysql'), $params['user'], $params['pass'], $options),
 54                     new MySQLAssembler($prefix)
 55                 );
 56 
 57             case 'sqlite':
 58                 return new PDOSqlDriver(SQLiteConnecter::getInstance($params['dsn'], null, null, $options), new SQLiteAssembler($prefix));
 59 
 60             case 'pgsql':
 61                 return new PDOSqlDriver(
 62                     PgSqlConnecter::getInstance(self::getDsn($params, 'pgsql'), $params['user'], $params['pass'], $options),
 63                     new PgSQLAssembler($prefix)
 64                 );
 65 
 66             case 'mongo':
 67                 return new MongoDriver($params);
 68 
 69             case 'redis':
 70                 return new RedisDriver($params);
 71 
 72             case 'memcache':
 73                 return new MemcacheDriver($params);
 74 
 75             case 'couch':
 76                 return new CouchDriver($params);
 77 
 78             default:
 79                 throw new CoreException('不支持的数据库扩展!');
 80         }
 81     }
 82 
 83     /**
 84      * 生成DSN
 85      *
 86      * @param array $params
 87      * @param string $type
 88      * @param bool|true $use_unix_socket
 89      * @return string
 90      * @throws CoreException
 91      */
 92     private static function getDsn($params, $type = 'mysql', $use_unix_socket = true)
 93     {
 94         if (!empty($params['dsn'])) {
 95             return $params['dsn'];
 96         }
 97 
 98         if (!isset($params['host']) || !isset($params['name'])) {
 99             throw new CoreException('连接数据库所需参数不足');
100         }
101 
102         if ($use_unix_socket && !empty($params['unix_socket'])) {
103             $dsn = "{$type}:unix_socket={$params['unix_socket']};dbname={$params['name']};";
104         } else {
105             $dsn = "{$type}:host={$params['host']};dbname={$params['name']};";
106             if (isset($params['port'])) {
107                 $dsn .= "port={$params['port']};";
108             }
109 
110             if (isset($params['charset'])) {
111                 $dsn .= "charset={$params['charset']};";
112             }
113         }
114 
115         return $dsn;
116     }
117 
118 }
119 
CrossPHP API documentation generated by ApiGen