PHP функция для добавления данных в строку

Мой код:

$myText = "";

function addText($textString){
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

Ожидаемый результат:

Привет...

$myText был пуст.

Почему это происходит?

9 ответов

Решение

Попробуй это:

$myText = "";

function addText($textString){
   global $myText;
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

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

вот демо: http://codepad.org/DeH89No6

Вы должны указать функции использовать глобальную переменную $myText

function addText($textString){
   global $myText;
   $myText .= $textString;
}

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

Хорошо, позвольте мне на самом деле помочь вам, а не просто рассказать, как заставить ваш текущий пример работать. По сути, переменные, определенные вне пользовательской функции, не видны внутри нее. В вашем примере ваша функция не знает, что такое $ myText, потому что он был объявлен вне области функций. Чтобы передать переменные в функцию, вам необходимо добавить их в качестве параметров - переменные, которые вы передаете в функцию при ее определении, а затем при вызове, например: function addText($param1, $param2),

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

Надеюсь, это поможет вам немного лучше понять PHP.

Это то, что вы называете переменной области. Это та часть кода, где ваша переменная известна, как описано здесь. Чтобы сделать короткий рассказ еще короче, даже если ваш $ myText внутри функции делит имя с тем, что снаружи, они совершенно разные. Это разные коробки, одна в вашей комнате (одна внутри вашей функции) и одна снаружи (другая). Даже если они помечены одинаково, вещи, которые вы положили в одну из них, не будут отображаться и в другой. Есть два способа сделать то, что вы хотите сделать.

Сначала простой, но плохой способ: создайте один большой блок со всеми, добавив глобальное ключевое слово в ключевое слово, как было опубликовано ранее. Это все равно что сказать: "Посмотрите снаружи на коробку с этим ярлыком и используйте этот". Но помните: глобальные переменные плохие.

Заманчиво, как темная сторона может быть, есть другой способ... Взять свою коробку с собой...

$myText = "";

function addText($existingText, $textToAdd) {
    return $existingText . $textToAdd;
}

addText($myText, "Look, it's there!");

echo $myText;

Пусть источник будет с вами.

Область видимости переменной PHP немного отличается от области видимости в других языках, к которым вы могли привыкнуть. Для переменной $myText быть видимым внутри функции addText, вы должны использовать global ключевое слово:

$myText = "";

function addText($textString){
   global $myText; //added this line
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

В качестве альтернативы, если код находится внутри класса, вы можете сделать $ myText переменной уровня класса, используя ключевое слово $this:

class SomeClass{
   function __init__(){
      $this->myText = "";
   }
   function addText($textString){
      $this->myText .= $textString;
   }

   function someFunction(){
      $this->addText("Hello there...");
   echo $this->myText;
   }
}

Просто еще один взгляд на это...

$myText = "The quick brown fox";

echo addText(" jumped over the lazy dog.", $myText);

function addText($addString,$toVar) {
    $newString = $toVar.$addString;
    return $newString;
} 

Получить функцию для возврата строки

function addText($textString){
   $myText .= $textString;
   return $myText
}

$myText = addText('string');

Область действия (время жизни переменных) функции не выходит за пределы функции. Для этой простой задачи я не понимаю, почему вы делаете функцию. Однако переменная, переданная в функцию, копируется в область действия функции, даже если вы называете переменную одинаковой, она не будет такой же. Чтобы иметь возможность получить что-то вне функции, вы должны использовать оператор return.

(с C++ ваш подход был бы возможен, если бы параметр функции был передан как ссылка)

Но возможное решение вашей проблемы может быть:

function addText($text){
    return $text;
}
$myText .= addText("Hello there");
echo $myText;

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

Это связано с переменной областью действия. В принципе $myText вне addText отличается от $myText внутри функции. Вы можете использовать это, чтобы установить переменную внутри функции на ту, которая находится за ее пределами:

function addText($textString){
    global $myText;
    $myText .= $textString;
}
Другие вопросы по тегам