Я могу использовать операторы в качестве функционального обратного вызова в PHP?

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

у меня не было бы надежного "всегда nvarchar" правило, потому что это может быть полными отходами во многих ситуациях - особенно ETL от ASCII/EBCDIC или идентификаторов и кодировать столбцы, которые часто являются ключами и внешними ключами.

, С другой стороны, существует много случаев столбцов, где я, несомненно, задал бы этот вопрос рано и если бы я сразу не получил надежный ответ, я сделал бы столбец nvarchar.

5
задан Vincent Robert 7 November 2009 в 10:51
поделиться

4 ответа

В этом конкретном случае используйте array_product () :

function mul() {
  return array_product(func_get_args());
}

В общем случае? Нет, вы не можете передать оператор в качестве обратного вызова функции. По крайней мере, вам нужно обернуть его функцией:

function mul() {
   return array_reduce(func_get_args(), 'mult', 1);
}

function mult($a, $b) {
  return $a * $b;
}
8
ответ дан 18 December 2019 в 13:15
поделиться

Если я определю вашу функцию, а затем сделаю это:

$arr = array(2,3,4,5,6);
mul($arr);

Я получаю следующее предупреждение:

Warning: array_reduce(): The second argument, '*', should be a valid callback in /home/azanar/Documents/Projects/testbed/test.php on line 6

Два других ответа здесь хорошо подходят для определения рабочего способа сделать это. Однако, как правило, это хорошая привычка, когда вы задаетесь вопросом, разрешено ли что-то на определенном языке, просто попробовать это и посмотреть, что произойдет. Вы можете быть удивлены тем, что позволяют некоторые языки, а если они этого не делают, они почти всегда будут давать вам какое-то значимое сообщение об ошибке.

1
ответ дан 18 December 2019 в 13:15
поделиться

Предоставленный вами код не будет работать, но вы можете сделать что-то подобное.

function mul()
{
   return array_reduce(func_get_args(), create_function('$a,$b', 'return "$a * $b'));
}

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

Обратите внимание, что одинарные кавычки важны, потому что вы используете символ доллара, поэтому вы не должны Я не хочу, чтобы PHP пытался их заменить.

5
ответ дан 18 December 2019 в 13:15
поделиться

PHP 5.3 имеет закрытие;)

0
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

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