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;
}