PHP функция для добавления данных в строку - PullRequest
2 голосов
/ 31 марта 2011

Мой код:

$myText = "";

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

addText("Hello there...");

echo $myText;

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

Привет! ...

$myText был пуст.

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

Ответы [ 9 ]

5 голосов
/ 31 марта 2011

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

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

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

3 голосов
/ 31 марта 2011

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

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

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

3 голосов
/ 31 марта 2011

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

$myText = "";

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

addText("Hello there...");

echo $myText;

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

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

2 голосов
/ 31 марта 2011

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

Сначала простой, но плохой способ: сделать один большой блок, включающий все, добавив ключевое слово global к одному внутри функции, как было опубликовано ранее. Это все равно что сказать: «Посмотрите снаружи на коробку с этим ярлыком и используйте этот». Но помните: глобальные переменные ПЛОХО.

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

$myText = "";

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

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

echo $myText;

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

0 голосов
/ 31 марта 2011

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

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

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

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

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

0 голосов
/ 31 марта 2011

Просто еще один пример ...

$myText = "The quick brown fox";

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

function addText($addString,$toVar) {
    $newString = $toVar.$addString;
    return $newString;
} 
0 голосов
/ 31 марта 2011

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

function addText($textString){
    global $myText;
    $myText .= $textString;
}
0 голосов
/ 31 марта 2011

Область видимости переменной 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;
   }
}
0 голосов
/ 31 марта 2011

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

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

$ myText = addText ('string');

...