Wbudowane funkcjonalności w PHP 7
I Typowanie parametrów funkcji czy wyniku zwracanego przez samą funkcje.
Typy danych – skalarneint
– integer – typ całkowity – liczba całkowitafloat
– typ zmiennoprzecinkowy – liczba zmiennoprzecinkowastring
– ciąg, łańcuch znakówbool
– boolean – typ logiczny
Typy danych – złożonearray
– tablica, listaobject
– obiekt
Typy danych – specjalnenull
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" }
?>