AGNIESZKA LEŚKÓW

Wbudowane funkcjonalności w PHP 7

KOMPENDIUM

Wbudowane funkcjonalności w PHP 7

I Typowanie parametrów funkcji czy wyniku zwracanego przez samą funkcje.

Typy danych – skalarne
int – integer – typ całkowity – liczba całkowita
float – typ zmiennoprzecinkowy – liczba zmiennoprzecinkowa
string – ciąg, łańcuch znaków
bool – boolean – typ logiczny

Typy danych – złożone
array – tablica, lista
object – obiekt

Typy danych – specjalne
null
resource – identyfikator zasobów

Typowanie parametrów funkcji czyli typowanie zmiennych w celu uzyskania np. liczb całkowitych następuje z użyciem słowa kluczowego int (integer – typ całkowity), jest to forma zabezpieczenia przed przypadkowym przekazaniem tekstu.

<?php
       function addition($a, $b) {
          return $a + $b;
       }
       $sum = addition("imie", "nazwisko");
       $result = $sum + $sum;
       echo $result . "<br />"; //0
       var_dump($result); //0
?>

W powyższym przypadku otrzymamy wartość 0.

Zdefiniowanie typów dla parametrów w celu zabezpieczenia się przed wprowadzaniem wartości innego typu niż tego, którego oczekujemy.

<?php
       function addition(int $a, int $b) {
          return $a + $b;
       }
       $sum = addition("imie", "nazwisko");
       $result = $sum + $sum;
       echo $result . "<br />"; //Fatal error
       var_dump($result); //Fatal error
?>

Wynikiem powyższego działania będzie ostrzeżenie informujące, że wartości muszą być typu integer a nie string.

<?php
       function addition(int $a, int $b) {
          return $a + $b;
       }
       $sum = addition(3, 7);
       $result = $sum + $sum;
       echo $result . "<br />"; //20
       var_dump($result); //int(20)
?>

Zdefiniowanie typu, który jest oczekiwany na wyjściu z danej funkcji, jeżeli chcemy aby nasza funkcja zawsze tylko zwracała liczbę całkowitą musimy zdefiniować typ danych na końcu funkcji jaki ma zwrócić.

<?php
       function addition(int $a, int $b):int {
          return $a + $b;
}
       $sum = addition(3, 7);
       $result = $sum + $sum;
       echo $result . "<br />"; //20       
       var_dump($result); //int(20)
?>

<?php
       function addition(int $a, int $b):int {
          return $a + $b;
       }
       $sum = addition("test", 7);
       $result = $sum + $sum;
       echo $result . "<br />"; //Fatal error
       var_dump($result); //Fatal error
?>

Przyjmując powyższy sposób, czyli typowanie parametrów funkcji czy wyniku zwracanego przez samą funkcje zapobiegamy błędom, mamy pewność, że przyjmujemy do funkcji a także zwracamy z funkcji właściwe dane.

Stosowanie typów podczas działań arytmetycznych

<?php
       function addition(float $a, float $b): float {
          return $a + $b;
       }
       function subtraction(float $a, float $b): float {
          return $a - $b;
       }
       function multiplication(float $a, float $b): float {
          return $a * $b;
       }
       function division(float $a, float $b) {
       //nie definiujemy typu, który będzie zwracany,
       //gdyż nie zwróci komunikatu tylko pokaże błąd
       if ($b == 0) {
          return "Nie można dzielić przez zero";
       }
          return $a / $b;
       }
       function modulo(int $a, int $b) {
          return $a % $b;
       }
       $resultAddition = addition(3.5, 7.7);
       $resultSubtraction = subtraction(3.5, 7.7);
       $resultMultiplication = multiplication(3.5, 7.7);
       $resultDivision0 = division(3.5, 0);
       $resultDivision = division(3.5, 7.7);
       $resultModulo = modulo(10, 3);
       echo "Dodawanie: " . $resultAddition . "<br />";
       echo "Odejmowanie: " . $resultSubtraction . "<br /> ";
       echo "Mnożenie: " . $resultMultiplication . "<br />";
       echo "Dzielenie przez 0: " . $resultDivision0 . "<br />" ;
       echo "Dzielenie: " . $resultDivision . "<br />" ;
       echo "Modulo - reszta z dzielenia: " . $resultModulo . "<br />" ;
?>

// Dodawanie: 11.2
// Odejmowanie: -4.2
// Mnożenie: 26.95
// Dzielenie przez 0: Nie można dzielić przez zero
// Dzielenie: 0.45454545454545
// Modulo - reszta z dzielenia: 1

Niejawna automatyczna konwersja typów realizowana przez interpreter PHP

Za każdym razem kiedy wykonujemy różne operacje, PHP w sposób niejawny wykonuje takie konwersje.

<?php

       $nr = 7;
       $text = "string";
       $result = $nr + $text; // PHP konwertując tekst na liczbę zmienia jej wartość na 0
       var_dump($result); //int(7)

?>


<?php

       $nr = 7;
       $text = "43string"; // Interpreter PHP sprawdza tylko do liczby
       $result = $nr + $text;
       var_dump($result); //int(50)

?>

Nie zawsze PHP w sposób niejawny jest w stanie wykonać konwersję np. z tekstu na tablice

<?php

       $owoc = ['jabłko'];
       $text = "string";
       $result = $owoc + $text;
       var_dump($result); //Fatal error

?>


Konwertowanie typów realizowane w sposób wymuszony, jawny

PHP pozwala w sposób jawny na konwertowanie z każdego typu danych na każdy inny typ danych, niestety nie znaczy to że wszystko się da.

<?php

       // Niemożliwa konwersja tablicy do tekstu
       $owoc = ['jabłko'];
       var_dump((string)$owoc); // string(5) "Array" - otrzymamy błąd, gdyż tablicy nie możemy przekonwertować do tekstu

       // Możliwa konwersja tekstu do tablicy
       $owoc = 'jabłko';
       var_dump((array)$owoc); // array(1) { [0]=> string(7) "jabłko" }

?>


Wróć do Kompendium