PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Funkcje > Lekcja 4

Zwracanie danych

Czy każda funkcja musi coś wyświetlać albo wykonywać ostateczne operacje na danych? Oczywiście, że nie - byłoby to bardzo ograniczające. Możemy zwrócić dane z funkcji przy użyciu instrukcji return. Dane mogą być dowolnego typu, nawet array.

<?php
function getHello()
{
    return 'Hello world';
}
echo getHello(); // result: Hello world

Wartym zaznaczenia jest, że wywołanie return przerywa wykonywanie funkcji w tym momencie i zwraca wartość. Jeśli za return będzie dalszy kod, nie zostanie on wykonany.

<?php
function getHello()
{
    return 'Hello';
    echo 'world';
}
echo getHello(); // result: Hello

Zwracaną wartość możemy potraktować tak jak każdą inną - wyświetlić, podstawić od razu do warunku i tak dalej.

<?php
function getNumber()
{
    return 5;
}

echo getNumber(); // result 5

$number = getNumber();
echo $number; // result 5

if (getNumber() >= 2) {
    echo 'OK'; // result: OK
}

Typ zwracanej wartości

Również przy zwracaniu wartości mamy podobną możliwość określenia typu, jak przy przekazywaniu argumentów. Została wprowadzona od PHP 7. Robimy to poprzez dodanie za nazwą i argumentami funkcji (ale przed określeniem ciała) znaku : oraz typu. Spójrz na przykład:

<?php
function getHello(): string
{
    return 'Hello world';
}
echo getHello(); // result: Hello world

Działa to na takiej samej zasadzie jak przy argumentach - domyślnie to co będzie możliwe zostanie rzutowane na odpowiedni typ. Aby wymusić dokładny typ musimy użyć strict_types. W przypadku próby zwrócenia wartości niepasującej do typu, wygenerowany zostanie błąd.

<?php
function getNumber(): int
{
    return 5.4;
}
echo getNumber(); // result: 5
<?php
declare(strict_types=1);
function getNumber(): int
{
    return 5.4;
}
echo getNumber(); // result: Uncaught TypeError: Return value of getNumber() must be of the type integer, float returned

Pora wrócić do kalkulatora i zastosować w nim nową wiedzę. Przenieśmy wyświetlanie wyniku do osobnej funkcji i użyjmy zwracania wartości z określeniem typu. Całość będzie wyglądała tak:

<?php

$operation = '+';
$number1 = 8;
$number2 = 4;

function operationAddition(float $number1, float $number2): float
{
    return $number1 + $number2;
}

function operationSubtraction(float $number1, float $number2): float
{
    return $number1 - $number2;
}

function operationMultiplication(float $number1, float $number2): float
{
    return $number1 * $number2;
}

function operationDivision(float $number1, float $number2): float
{
    return $number1 / $number2;
}

function showResult(float $result)
{
    echo 'Result: ' . $result;
}

switch ($operation) {
    case '+':
        $result = operationAddition($number1, $number2);
        break;
    case '-':
        $result = operationSubtraction($number1, $number2);
        break;
    case '*':
        $result = operationMultiplication($number1, $number2);
        break;
    case '/':
        $result = operationDivision($number1, $number2);
        break;
}

showResult($result);

Na tym go zakończymy - może nie powstał najbardziej rozbudowany kalkulator świata, ale mam nadzieję, że było łatwiej zrozumieć pewne zagadnienia.

Ćwiczenia

  1. Stwórz funkcję isAdult zwracającą true, gdy osoba o wieku przesłanym przez argument jest dorosła lub false jeśli nie.

    Przykładowe rozwiązanie

  2. Przygotuj funkcję rectangleArea obliczającą pole prostokąta o bokach $sideA i $sideB, przekazanych przez argumenty. Zwróć obliczone pole z funkcji i wyświetl. Nadaj odpowiednie typy dla argumentów oraz zwracanej wartości, zakładając, że będziemy operowali tylko na liczbach całkowitych.
    <?php
    $sideA = 8;
    $sideB = 5;
    // your code here
    

    Przykładowe rozwiązanie

Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze