PHP:将参数解释为数组?

时间:2014-03-12 14:42:13

标签: php arrays function class arguments

我一直在努力编写一个类,让我的同学更容易将项目插入数据库。为此,我想在该类中创建一个函数,将所有列和值作为键和值数组。显然我可以做到以下几点:

class aClass {
    public function aFunction( $args ) {
    }
}

(new aClass)->aFunction( Array( 'column1' => 'value1', 'column2' => 'value2' ) );

这会创建一个带有$ args [column] = value的数组$ args。而且我知道我不是第一个问这个问题的人,但是我想让它更棒的发作。 我正在寻找一个至少比上面的例子更有趣的替代方案。我没多久意识到' =>'是除Array之外的每个类的直接语法错误。那么,我又尝试了两件事,其中一件更糟糕,其中一件因为我的推理失败而无法工作。

class aClass {
    public function aFunction( ) {
        $args = func_get_args();
    }
}

(new aClass)->aFunction( 'value1', 'value2' );

上面的内容非常简洁,但我知道没有办法传递列名而不会比第一个例子更长和更愚蠢。

class aClass {
    public function aFunction( ) {
        $args = get_defined_vars();
    }
}

(new aClass)->aFunction( $column1 = 'value1', $column2 = 'value2' );

除了它不起作用之外,上述情况还可以。我认为它不起作用,因为" $ column1 =' value1'"只会回归"'价值'"关于成功,这使得它只是一种愚蠢的长期和资源效率低下的方式来写作"''"。

任何sugestions?我知道它有点愚蠢而且之前可能已经提出过这个问题,但只有Array类才具有该结构似乎是不公平的。我现在实际上已经谷歌搜索了几个小时,亲爱的上帝,请帮助我的ocd。

编辑: 即使它只是让php解析器解释=>作为一个逗号所以我可以使用模数运算符,任何事情都会更好。

1 个答案:

答案 0 :(得分:1)

你可以使用这样的东西作为模板,它仍然需要一些工作。

<?php

class DB{
        private $cols;
        private $values;


        public function __call($method,$arguments){
                $this->cols[] = "`".$method."`=?";
                $this->values[] = $arguments[0];
                return $this;
        }

        public function exec(){
                $sql = "INSERT INTO `test` SET ";
                $sql .= implode(",",$this->cols);
                echo "SQL for prepared statement: ".$sql."\n";
                echo "Values:\n";
                print_r($this->values);
        }


        public static function insert(){
                return new self();
        }

}

//Usage    
DB::insert()->column1('value1')->column2('value2')->exec();

输出:

SQL for prepared statement: INSERT INTO `test` SET `column1`=?,`column2`=?
Values:
Array
(
    [0] => value1
    [1] => value2
)