#php
Вопрос:
Я новичок в написании функций, которые разделяются между различными частями программы. У меня есть этот тип функции ниже, который отлично работает в одиночку, но я хочу, чтобы он работал с разными наборами данных, чтобы мне не нужно было копировать/дублировать всю функцию. Способ работы функции заключается в том, что она захватывает сохраненные данные, которые находятся в базе данных, затем преобразует их в правильную равную часть, а затем легко отображает с помощью чего-то вроде эха. Две первые строки в функции не могут быть в функции, если она будет работать с несколькими частями, но я не знаю, как это сделать. И если вы используете global или перемещаете части $ за пределы функции, функция явно не функционирует. Так что я застрял. Если возникнут какие-либо вопросы, дайте мне знать.
function something() { $data_in_database_one = get_option( 'config' ); $something = $data_in_database_one['data_in_database_one']; if ( ( $something ) == '0' ) : echo 'zero'; elseif ( ( $something ) == '1' ) : echo 'one'; elseif ( ( $something ) == '2' ) : echo 'two'; elseif ( ( $something ) == '3' ) : echo 'three'; elseif ( ( $something ) == '4' ) : echo 'four'; elseif ( ( $something ) == '5' ) : echo 'five'; else : echo ''; endif; }
Эта часть не должна быть в функции:
$data_in_database_one = get_option( 'config' ); $something = $data_in_database_one['data_in_database_one'];
Потому что, например, будет несколько разделов данных:
$data_in_database_two = get_option( 'config' ); $something = $data_in_database_two['data_in_database_two'];
и:
$data_in_database_three = get_option( 'config' ); $something = $data_in_database_three['data_in_database_three'];
и:
$data_in_database_four = get_option( 'config' ); $something = $data_in_database_four['data_in_database_four'];
и:
$data_in_database_five = get_option( 'config' ); $something = $data_in_database_five['data_in_database_five'];
Как вы видите в примерах, все имена меняются во всех частях, имя меняется в 3 названиях в 2 выстроенных примерах, которые я показываю выше.
Итак: я подумал написать несколько операторов «если», которые делают что-то вроде (не настоящий код, написанный только для того, чтобы вы меня поняли):
if $this is called then use these lines $data_in_database_one = get_option( 'config' ); $something = $data_in_database_one['data_in_database_one']; elseif $this_two is called then use these lines $data_in_database_two = get_option( 'config' ); $something = $data_in_database_two['data_in_database_two'];
Но я не знаю, как это написать. И я не знаю, как связать все это с исходной функцией что-то(). ???
Комментарии:
1. Использовать параметры функции?
Ответ №1:
Если $data_in_database_one = get_option( 'config' );
всегда одно и то же, и если это просто ключ data_in_database_one
к тому, кто меняется… Может быть, вы можете попробовать что-то подобное ?
function something(string $data_key) { $config = get_option( 'config' ); switch ($config[$data_key]) { case '0': echo 'zero'; break; case '1': echo 'one'; break; case '2': echo 'two'; break; case '3': echo 'three'; break; case '4': echo 'four'; break; case '5': echo 'five'; break; default: echo ''; break; } }
Вы можете видеть, что я использую случай переключения, а не многие «если»
И после того, как в вашей программе вы сможете сделать что-то подобное :
something('data_in_database_one'); //Will echo 'one' something('data_in_database_two'); //Will echo 'two'
На вашем примере это может быть:
if ($this) { something('data_in_database_one'); } else if ($this_two) { something('data_in_database_two'); }
Я не знаю, было ли это тем, что ты видишь ?
Отредактируйте, если я понимаю проблему и если эхо не было нужно :
function something(string $data_key) { $config = get_option('config'); return $config[$data_key]; } //Now you can use : $data_in_use_one = something('data_in_database_one'); $data_in_use_two = something('data_in_database_two');
Комментарии:
1. Как $data_in_database_one, так и ключевые изменения data_in_database_one. Так что это самая трудная часть. Но вы, возможно, нащупали что-то со строкой $data_key внутри (). Я новичок во всем этом, поэтому пытаюсь понять это. Я попробую ваши идеи.
2. В вашем примере все еще кажется, что $data_key должен быть другим типом кода, потому что имена действительно меняются и не могут быть определены в функции. Я не знаю. Может быть, есть другой способ. Имена могут иметь частичное имя, такое же, как окончание 2 символов или что-то в этом роде.
3. В эту секунду я читаю что-то о: foreach($GLOBALS … может быть, что-то из этого сработает…
4. Я не уверен, что понимаю, что вы хотите сделать. Если вы просто хотите, чтобы что-то вернуло базу данных для использования, см. Мою правку в этом посте
5. Итак, я решил эту идею, используя вашу идею string $variable, но я использовал другой метод, просто поместив свой исходный код функции в отдельный файл с require_once в этот файл. Затем я вызываю функцию с эхом и 2 необходимыми переменными строками, и это отлично работает. Может быть, не самый лучший?