PHP - сфера настойчивости - Codeigniter - PullRequest
1 голос
/ 20 января 2011

Мой вопрос проистекает из модели, которую я пишу для построения запросов из предопределенных объектов поиска, которые содержат «критерии», каждый поиск имеет свойство $search->criteria, которое представляет собой массив объектов критериев ....

Criteria (

    "name"    => "name",  //name of given field to be searched
    "expr"    => "expr",  //could be "<=" ">=" "="
    "s_value" => "value"  //value to be searched with

)

и часть моей функции поиска, которая добавляет правильные операторы where в запрос ...

    if(count($criteria)) {
        foreach($criteria as $crit) {
            $this->{$crit['name']}($crit['s_value'],$crit['expr']);
        }
    }

И, наконец, наконец, функция, которую вызывает цикл, здесь «имя» соответствует тому, что объект критерия установил как $ критерии ['имя'] ....

function name($value,$expr = '=') {              

    $this->db->where('specific_field_name '.$expr,$value);

}

Теперь к вопросу ..

Я хочу создать переменную внутри «имени», которая будет сохраняться после одного выполнения, поэтому, например, если у меня есть 2 критерия с одинаковым именем и оно выполняется дважды, я хочу сохранить переменную в своей области действия для нескольких казни.

EDIT

Что я ХОЧУ сделать. У меня есть несколько таких функций, которым всем нужны свои счетчики.

function name($value,$expr = '=') {              
    if(isset($count))        
        $this->db->or_where('specific_field_name '.$expr,$value);
        $count++;
    }
    else {
        $count = 1;
        $this->db->where('specific_field_name '.$expr,$value);
    }
}

Идеи

РЕШЕНИЕ

    if(count($criteria)) {
        $criteria_count = array()
        foreach($criteria as $crit) {
            if(isset($criteria_count[$crit['name']])) {
                $criteria_count[$crit['name']]++;
            }
            else {
                $criteria_count[$crit['name']] = 1;
            }
            $this->{$crit['name']}($crit['s_value'],$crit['expr'],$criteria_count[$crit['name']]);
        }
    }

Изменена основная функция поиска для поддержки массива $criteria_count с именами в качестве ключей и передачей отсчета для определенных функций.

1 Ответ

1 голос
/ 20 января 2011

Вы можете использовать оператор global, если вы действительно хотите сделать это таким образом.

Редактировать: вот как я могу передать счет в имя и отследить его таким образом.

В начале функции поиска: $count = 0;

if(count($criteria)) {
        foreach($criteria as $crit) {
            $count = $this->{$crit['name']}($crit['s_value'],$crit['expr'],$count);
        }
    }

Изатем имя функции:

function name($value,$expr = '=',$count) {              
    if($count > 0)        
        $this->db->or_where('specific_field_name '.$expr,$value);
        $count++;
    }
    else {
        $count = 1;
        $this->db->where('specific_field_name '.$expr,$value);
    }
return $count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...