Variable Scope
Часть раздела Основы путешествия по PHP на Coddy. Урок 67 из 71.
Переменные, созданные внутри функции, полностью отделены от переменных за её пределами. Эта концепция называется областью видимости variable, и её понимание помогает предотвращать запутанные ошибки в вашем коде.
variable, defined inside a function, существует только внутри этой function. Это называется local variable:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // Ошибка: $message здесь не существует
?>Переменная $message создаётся внутри sayHi() и исчезает, когда функция завершается. Попытка обратиться к ней за пределами функции вызывает ошибку.
Аналогично, переменные, определённые за пределами функции, автоматически недоступны внутри неё:
<?php
$name = "Alice";
function greet() {
echo $name; // Ошибка: $name не определена внутри этой функции
}
greet();
?>Несмотря на то, что $name существует в основном коде, функция не может его видеть. Чтобы использовать внешние значения в функции, передавай их как parameters: это чистый и рекомендуемый подход, который ты уже изучил.
Это разделение действительно полезно. Оно означает, что функции не будут случайно изменять переменные в других частях вашей программы, благодаря чему код становится более предсказуемым и его легче отлаживать.
Задание
ЛегкоПрочитайте две строки входных данных:
- Имя человека (например,
Alice) - Размер бонуса в виде целого числа (например,
50)
Создайте function с именем calculateBonus, которая принимает два parameters: $name (string) и $bonus (int).
Внутри function:
- Создайте local variable
$baseSalaryи присвойте ей значение1000 - Рассчитайте общую pay, сложив
$baseSalaryи$bonus - Верните string в формате:
[name] earns [total]
Вызовите function с input values и выведите возвращённый result.
Пример 1:
Если input — Alice и 50, результатом должно быть:
Alice earns 1050Пример 2:
Если input — Bob и 200, результатом должно быть:
Bob earns 1200Пример 3:
Если input — Emma и 0, результатом должно быть:
Emma earns 1000Попробуйте сами
<?php
// Прочитать ввод
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));
// TODO: Создать функцию calculateBonus ниже
// - Она должна принимать $name (string) и $bonus (int) в качестве параметров
// - Создать локальную переменную $baseSalary со значением 1000
// - Вычислить общую оплату и вернуть "[name] earns [total]"
// Вызвать функцию и вывести результат
echo calculateBonus($name, $bonus);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types5Conditional Logic
If StatementIf - ElseThe Ternary OperatorNull Coalescing OperatorSwitch StatementRecap - Making Decisions3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString OperatorsПотренируйтесь самостоятельно: Онлайн-компилятор PHP