Variable Scope
Parte da seção Fundamentos do Journey de PHP da Coddy. Lição 67 de 71.
Variáveis criadas dentro de uma função são completamente separadas de variáveis fora dela. Esse conceito é chamado de escopo de variável, e compreendê-lo previne bugs confusos em seu código.
Uma variável definida dentro de uma função só existe dentro dessa função. Ela é chamada de variável local:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // Erro: $message não existe aqui
?>A variável $message é criada dentro de sayHi() e desaparece quando a função termina. Tentar acessá-la fora causa um erro.
Da mesma forma, variáveis definidas fora de uma função não estão automaticamente disponíveis dentro dela:
<?php
$name = "Alice";
function greet() {
echo $name; // Error: $name is not defined inside this function
}
greet();
?>Mesmo que $name exista no código principal, a função não pode vê-lo. Para usar valores externos em uma função, passe-os como parâmetros—essa é a abordagem limpa e recomendada que você já aprendeu.
Essa separação é na verdade útil. Isso significa que as funções não alterarão acidentalmente variáveis em outras partes do seu programa, tornando seu código mais previsível e mais fácil de depurar.
Desafio
FácilLeia duas linhas de entrada:
- O nome de uma pessoa (por exemplo,
Alice) - Um valor de bônus como um número inteiro (por exemplo,
50)
Crie uma função chamada calculateBonus que aceita dois parâmetros: $name (string) e $bonus (int).
Dentro da função:
- Crie uma variável local
$baseSalarye defina-a como1000 - Calcule o pagamento total somando
$baseSalarye$bonus - Retorne uma string no formato:
[name] earns [total]
Chame a função com os valores de entrada e imprima o resultado retornado.
Exemplo 1:
Se as entradas forem Alice e 50, a saída deve ser:
Alice earns 1050Exemplo 2:
Se as entradas forem Bob e 200, a saída deve ser:
Bob earns 1200Exemplo 3:
Se as entradas forem Emma e 0, a saída deve ser:
Emma earns 1000Experimente você mesmo
<?php
// Ler entrada
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));
// TODO: Crie a função calculateBonus abaixo
// - Deve aceitar $name (string) e $bonus (int) como parâmetros
// - Crie uma variável local $baseSalary definida como 1000
// - Calcule o pagamento total e retorne "[name] ganha [total]"
// Chame a função e imprima o resultado
echo calculateBonus($name, $bonus);
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
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 OperatorsPratique por conta própria: Compilador de PHP online