Location: PHPKode > scripts > DATA > data/DATA/MySQL5/Database.php
<?php
/**
 * @package DATA_MySQL5
 */

/**
 * This class is the abstraction of a MySQL5 database implementing the
 * array access behavior.
 * 
 * Example:
 * <code>
 * // connect to MySQL
 * $DB->connect($server, $user, $pass);
 * // select database 
 * $DB->selectSchema($schema);
 * // access a table
 * $DB['table']...;
 * </code>
 * 
 * @todo Implement table existence check.
 */
class DATA_MySQL5_Database implements ArrayAccess {
    /**
     * Disables inboxing in this object.
     * @var bool
     */
    protected $inboxingDisabled;
    
    /**
     * Constructor.
     */
    public function __construct() {
        $this->inboxingDisabled = false;
    }
    
    /**
     * isset(..) handler. Indicates if table exists in current schema.
     * Not implemented yet.
     * Will throw {@link DATA_NotImplemented DATA_NotImplemented exception}.
     * @param string $offset The table name.
     * @return bool True if table exists, false otherwise.
     */
    public function offsetExists($offset) {
        throw new DATA_NotImplemented("DATA_MySQL5_Database::offsetExists");
    }
    
    /**
     * [..] handler. Returns a table object corresponding to the array offset.
     * Must be a valid table (won't be checked).
     * @param string $offset The table name.
     * @return DATA_MySQL5_Table The table object.
     */
    public function offsetGet($offset) {
        $table = new DATA_MySQL5_Table($offset);
        if ($this->inboxingDisabled) {
            $table = $table->withoutInboxing;
        }
        return $table;
    }
    
    /**
     * [..] = handler. Table creation is not available.
     * Will throw {@link DATA_ReadOnly DATA_ReadOnly exception}.
     */
    public function offsetSet($offset, $value) {
        throw new DATA_ReadOnly();
    }
    
    /**
     * unset(..) handler. Table dropping is not available.
     * Will throw {@link DATA_ReadOnly DATA_ReadOnly exception}.
     */
    public function offsetUnset($offset) {
        throw new DATA_ReadOnly();
    }
    
    /**
     * Member property overloading.
     * 
     * withoutInboxing property returns a db object with inboxing of
     * mysql types disabled.
     * 
     * @param string $propname Property name.
     * @return mixed Property value.
     */
    public function __get($propname) {
        if ($propname == 'withoutInboxing') {
            $newDB = clone $this;
            $newDB->inboxingDisabled = true;
            return $newDB;
        }
        throw new Exception("Undefined property: {$propname}");
    }
    
    /**
     * Function call overload. Proxies the calls to the common database
     * functions, if present.
     * @see DATA_MySQL5_Access
     */
    public function __call($methodName, $arguments) {
        if (is_callable(array('DATA_MySQL5_Access', $methodName))) {
            return call_user_func_array(array('DATA_MySQL5_Access', $methodName), $arguments);
        }
    }
}
?>
Return current item: DATA