Объединить две переменные

Вот что я пытаюсь сделать:

$errmsg_1 = 'Please make changes to your post';
$errmsg_2 = 'Please make changes to your post image';

$error = 1;

echo $errmsg_.$error; //'Please make changes to your post';

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

Кто-нибудь может помочь?

10 ответов

Решение

Хранить сообщения об ошибках в массиве:

$errmsg[1] = 'Please make changes to your post';
$errmsg[2] = 'Please make changes to your post image';

// and so on

$error = 1;

echo $errmsg[$error];

То, что вы просите, известно как переменная переменная - см. http://uk.php.net/manual/en/language.variables.variable.php для получения дополнительной информации.

Но, пожалуйста, не делай этого; это считается очень плохой практикой кодирования.

На самом деле вам нужен массив:

$errmsg = array(
    'Please make changes to your post',       //this will be $errmsg[0]
    'Please make changes to your post image'  //this will be $errmsg[1]
);

$error = 0;   //nb: arrays start at item number 0, not 1.

echo $errmsg[$error];

Это гораздо лучшая практика кодирования, чем возиться с переменными переменными.

Пытаться

echo {'$errmsg_' . $error};

Хотя вы делаете это действительно довольно неправильно. Вы должны использовать вместо этого массив; объединение имен переменных является плохой практикой и приводит к грязному / нечитаемому / неработающему коду. Использование массива будет работать так:

$errors = array(
    'Please make changes to your post',
    'Please make changes to your post image'
);

echo $errors[$error];

Хотя имейте ввиду, что $error начинается с 0, так как массивы основаны на 0 индексах.

С головы до головы, я думаю, ты хочешь $errmsg_{$error}, но я не в состоянии проверить / перепроверить это прямо сейчас.

Это должно работать:

$errmsg_1 = 'Please make changes to your post';
$errmsg_2 = 'Please make changes to your post image';

$error = 1;

echo ${'errmsg_ ' . $error};

Вы пытаетесь сделать это:

function errorMsg($code)
{
  $msg;
  switch($code)
  {
  case 1:
    $msg = 'Please make changes to your post';
    break;

  case 2:
    $msg = 'Please make changes to your post image';
    break;
  }
  return $msg;
}

echo errorMsg(1);
$error_msg = 'Please make changes to your ';
$error[1] = 'post';
$error[2] = 'post image';

for($i=1; $i<=count($error); $i++)
 echo $error_msg . $error[$i];

Не обидно, а то, что ты делаешь - плохой дизайн.

Небольшое, но далеко не идеальное решение будет хранить ваши ошибки в виде массива.

$errors = array('Please make changes to your post', 'Please make changes to your post image');
$error = 0;
echo $errors[$error];

Попробуйте использовать это ${$errmsg_.$error}

Это переменная переменная: http://php.net/manual/en/language.variables.variable.php

Используйте массивы. сохраните индексы для удобного использования в будущем, а также для легкого изменения сообщений об ошибках и упорядоченного API.

$errmsg = array(
    1 => 'Please make changes to your post',
    2 => 'Please make changes to your post image'
);

$error = 1;

echo $errmsg[$error]; //'Please make changes to your post';
Другие вопросы по тегам