我如何重构这个以进行单个函数调用?

时间:2011-11-19 00:11:19

标签: php mysql

我根据需要使用它一段时间更新mysql。但是我对语法不太确定..并且需要将sql迁移到数组。

特别是

database::query("CREATE TABLE $name($query)");

这是否转化为

CREATE TABLE bookmark(name VARCHAR(64), url VARCHAR(256), tag VARCHAR(256), id INT)

这是我猜...这是对的吗?

class table extends database
{
    private function create($name, $query)
    {
        database::query("CREATE TABLE $name($query)");
    }

    public function make($type)
    {
        switch ($type) 
        {
            case "credentials":
                self::create('credentials', 'id INT NOT NULL AUTO_INCREMENT, flname VARCHAR(60), email VARCHAR(32), pass VARCHAR(40), PRIMARY KEY(id)');
                break;
            case "booomark":
                self::create('boomark', 'name VARCHAR(64), url VARCHAR(256), tag VARCHAR(256), id INT');
                break;
            case "tweet":
                self::create('tweet', 'time INT, fname VARCHAR(32), message VARCHAR(128), email VARCHAR(64)');
                break;
            default:
                throw new Exception('Invalid Table Type');
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果我已理解您要说的内容,您只需将create()方法中的代码更改为与make()类似,从而使create()成为公共方法使用make()签名并从类中删除make()方法:

public function create($table_array)  
{  
    foreach($table_array as $table) {
        $type = $table["type"];

        switch ($type)   
        {  
            case "credentials":  
                database::query('CREATE TABLE credentials(id INT NOT NULL AUTO_INCREMENT, flname VARCHAR(60), email VARCHAR(32), pass VARCHAR(40), PRIMARY KEY(id))');  
                break;  
            case "booomark":  
                database::query('CREATE TABLE boomark(name VARCHAR(64), url VARCHAR(256), tag VARCHAR(256), id INT)');  
                break;  
            case "tweet":  
                database::query('CREATE TABLE tweet(time INT, fname VARCHAR(32), message VARCHAR(128), email VARCHAR(64))');  
                break;  
            default:  
                throw new Exception('Invalid Table Type');  
        }
    }
}