这个查询创建者类对你有意义吗?

时间:2017-05-04 19:42:44

标签: php sql class makefile

我正在准备一个简单的课程。我想通过遵循不同的路径来创建查询。下面的类是草稿。我期待着你的建议。

Cyclomatic Complexity编号4. PHP Mess Detector,PHPCS修复工具,我没有问题。

我的英语不好,对不起。

<?php

class test
{

    protected $q = array();
    protected $p = array();

    public function get()
    {
        $new = array();
        foreach ($this->p as $value) {
            $new = array_merge($new, $value);
        }
        $this->p = $new;

        print_r($this->p);

        $query = 'select * from table ';
        foreach ($this->q as $sql) {
            $query .= implode(' ', $sql) . ' ';
        }
        echo $query . PHP_EOL;
    }

    public function camelCase($value)
    {
        return strtolower(preg_replace('/(.)([A-Z])/', '$1 $2', $value));
    }
    public function __call($method, $params)
    {

        $clause = $this->camelCase($method);
        $clause = explode(' ', $clause);

        if ($key = array_search('in', $clause)) {
            $clause[$key] = 'in(?)';
        } elseif (isset($clause[2]) && in_array($clause[2], array(
            'or',
            'and'
        ))) {
            $clause[1] = $clause[1] . ' =?';
            $clause[3] = $clause[3] . ' =?';
        } elseif (isset($clause[0]) && $clause[0] == 'limit') {
            $clause[$key] = 'limit ? offset ?';
        } elseif (isset($clause[1]) && $clause[1] != 'by') {
            $clause[1] = $clause[1] . ' =?';
        }

        $this->q[] = $clause;
        $this->p[] = $params;

        return $this;
    }

}

查询创建者类的使用如下。

 <?php
 (new test())
    ->orderByIdDesc()
    ->limit(15)
    ->get();

 (new test())
    ->whereIdOrName(6,'foo')
    ->get();

 (new test())
    ->whereIdIsNotNull(10)
    ->get();

 (new test())
    ->whereIdIn(9)
    ->get();

 (new test())
    ->whereIdNotIn(8)
    ->get();

输出:

Array
(
    [0] => 15
)
select * from table order by id desc  limit ? offset ? 
Array
(
    [0] => 6
    [1] => foo
)
select * from table where id =? or name =? 
Array
(
    [0] => 10
)
select * from table where id =? is not null 
Array
(
    [0] => 9
)
select * from table where id in(?) 
Array
(
    [0] => 8
)
select * from table where id not in(?) 

如果没有意义,你可以写下为什么没有意义。

1 个答案:

答案 0 :(得分:0)

在责任方面,你的班级不应该在方法中回应。

busniessController.RollAll();
dblsteen1.Text = busniessController.GetDiceValue(0).ToString();
dblsteen2.Text = busniessController.GetDiceValue(1).ToString();
dblsteen3.Text = busniessController.GetDiceValue(2).ToString();
dblsteen4.Text = busniessController.GetDiceValue(3).ToString();
dblsteen5.Text = busniessController.GetDiceValue(4).ToString();

public function get()
{
    $new = array();
    foreach ($this->p as $value) {
        $new = array_merge($new, $value);
    }
    $this->p = $new;

    print_r($this->p);

    $query = 'select * from table ';
    foreach($this->q as $sql){
       $query .= implode(' ', $sql) . ' ';
    }
    return $query . PHP_EOL;
}

此外,您应该查看现有的库,而不是发明和维护自己的库(例如,雄辩的)。

如果你是PHP 5.4+(我希望如此),你可以使用短数组语法。

该课程可能是最终的,具有私人属性。