MySQL ifnull эквивалентный для php

дополнительная работа, вероятно, не стоит того, если Вам действительно действительно не нужна эффективность. у Вас, вероятно, будет намного лучшая эффективность просто при помощи оператора + = вместо этого.

Теперь после той правовой оговорки, я отвечу на Ваш фактический вопрос...

эффективность строкового класса STL зависит от реализации STL, который Вы используете.

Вы могли , эффективность гарантии и имеет больший контроль сами путем выполнения конкатенации вручную через c встроенные функции.

, Почему оператор + не эффективен:

Смотрят на этот интерфейс:

template 
basic_string
operator+(const basic_string& s1,
          const basic_string& s2)

Вы видите, что новый объект возвращается после каждого +. Это означает, что новый буфер используется каждый раз. При выполнении тонны дополнительных + операции, это не эффективно.

, Почему можно сделать это более эффективным:

  • Вы гарантируете эффективность вместо того, чтобы доверять делегату, чтобы сделать это эффективно для Вас
  • станд.:: строковый класс ничего не знает о макс. размере Вашей строки, ни как часто Вы будете конкатенировать к нему. Вы можете иметь это знание и можете сделать вещи на основе наличия этой информации. Это приведет к меньшему количеству перераспределений.
  • Вы будете управлять буферами вручную, таким образом, можно будет быть уверены, что Вы не скопируете целую строку в новые буферы, когда Вы не захотите, чтобы это произошло.
  • можно использовать стек для буферов вместо "кучи", которая намного более эффективна.
  • строка + оператор создаст новый строковый объект и возвратит ее следовательно использование нового буфера.

Соображения для реализации:

  • Отслеживают длину строки.
  • Сохраняют указатель до конца строки и запуска или просто запуска и используют запуск + длина как смещение для нахождения конца строки.
  • Удостоверяются буфер, в котором Вы храните свою строку, является достаточно большим, таким образом, Вы не должны перераспределять данные
  • Использование strcpy вместо strcat, таким образом, Вы не должны выполнять итерации по длине строки для нахождения конца строки.

структура данных Веревки:

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

11
задан sequoia mcdowell 10 September 2009 в 13:48
поделиться

2 ответа

As of PHP 5.3 you could also use the short ternary operator:

$exTime = get_cfg_var("session.gc_maxlifetime") ?: 1440;

This is basically your anticipated functionality but without having to declare the function. In PHP versions prior to 5.3, you should go with André's answer.

Keep in mind though, that calling the function might throw warnings, if it is about to check arrays in which keys aren't specified:

$array = array(
    0 => array(
        0 => 100
    )
);

$example = isNull($array[0][1], 200);
13
ответ дан 3 December 2019 в 07:38
поделиться

Как насчет добавления этой небольшой функции?

function isnull($var, $default=null) {
    return is_null($var) ? $default : $var;
}

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

3
ответ дан 3 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: