2015. már 06.

Típuskonverzió

írta: Bozzai Gyula
Típuskonverzió

elephpant_01_k.jpg

A PHP a laza vagy gyengén típusos nyelvek közé tartozik. Ez azt jelenti, hogy nem kell előre meghatároznunk a változók típusát, akkor jönnek létre, amikor először használjuk őket, és értéket adunk nekik.

A létrejött változók típusát a hozzárendelt érték határozza meg, ráadásul, bármikor változtathatunk a típuson, a hozzárendelt érték típusának változtatásával. Tehát, a PHP egyik típusból a másikba automatikusan képes konvertálni.

Lássuk ezt példákon keresztül.
Azonban, mielőtt nekilátnánk, ismerkedjünk meg egy PHP függvénnyel, amely segítségével könnyen megérthetjük a típuskonverziót:

 

string gettype ($var);

A "gettype" függvény visszaadja szöveges formában a paraméterként kapott változó típusát.

 

Első lépésben hozzunk létre egy {$valtozo1} nevű változót, és értékként adjunk meg neki egy számot, idézőjelek közt. Az idézőjelek azt mondják a PHP-nek, hogy a változó típusa szöveg, vagyis egy string:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
echo "<br />"; // Sortörés ?>

A fenti példában láthatjuk, hogy a gettype függvény visszatérési értéke String lett, azaz a PHP automatikusan meghatározta a változó típusát.

Azért, hogy a képernyőn ne folyjanak egybe a sorok, használjuk sortöréshez a következő utasítást:
echo "<br />";

A következő lépésben adjunk a változónkhoz egy számot, majd ismét írassuk ki a típusát:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + 5; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés ?>

Ahogy láthatjuk, a PHP végrehajtja a műveletet, ehhez magától elvégzi a szükséges típuskonverziót, a string típusú változónkból egész szám, azaz integer típus lett.

Most adjunk a változónkhoz egy szöveget, például 10 almát:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + 5; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + "10 alma"; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés ?>

A PHP számára nincs lehetetlen, még ezt a fura műveletet is végrehajtja. A 10 almát egész számmá konvertálja (10), majd hozzáadja a változóhoz.

Fordítsuk meg a dolgot, a változónkat fűzzük egy szöveghez:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + 5; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + "10 alma"; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés $valtozo1 = "A változó jelenlegi értéke: " . $valtozo1; echo gettype($valtozo1); // String
echo "<br />"; // Sortörés ?>

A PHP ismét végrehajtja a rá bízott feladatot, és mivel ehhez string típusra van szükség, újra végrehajtja a típuskonverziót, ezzel nekünk továbbra sem kell törődnünk.

Természetesen, ha a változónkhoz hozzáadunk egy lebegőpontos típust (float), akkor a változó is lebegőpontos típussá változik, és így tovább...
A fentieket a PHP idegen szóval "Type Juggling" néven nevezi.

A PHP nagyon rugalmasan kezeli a típusokat, ahogy az eddigiekben láthattuk. Ez sokszor jól jön, de nagyon sok hiba forrása is lehet.

Az automatikus típuskonverzió helyett mi magunk is megváltoztathatjuk egy változó típusát. Ehhez két módszert is mutatok.

Az első a settype függvény:

 

settype ($var, $type);

A settype függvény két paramétert vár tőlünk, az első maga a változó, amelynek szeretnénk a típusát megváltoztatni, a második pedig a típus, amelyre konvertálni szeretnénk. (A függvénynek van egy visszatérési értéke is, de most itt ezzel nem foglalkozunk.)

A "típus" a következők lehetnek:

  • "boolean" (vagy "bool")
  • "integer" (vagy "int")
  • "float"
  • "string"
  • "array"
  • "object"
  • "null"

 

Folytassuk programunkat, és használjuk a settype függvényt:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + 5; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés $valtozo1 = $valtozo1 + "10 alma"; echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés $valtozo1 = "A változó jelenlegi értéke: " . $valtozo1; echo gettype($valtozo1); // String
echo "<br />"; // Sortörés settype($valtozo1, "integer"); echo gettype($valtozo1); // Integer
echo "<br />"; // Sortörés ?>

A fenti példában utasítottuk a PHP-t, hogy konvertálja a string típusú változónkat egész számmá.

A másik módszer a típusmegfeleltetés (Type Casting).
Ehhez a változó elé zárójelbe írjuk azt a típust, amelynek szeretnénk hogy a PHP értelmezze.

A "típus" a következők lehetnek:

  • (int), vagy (integer)
  • (bool), vagy (boolean)
  • (float)
  • (string)
  • (array)
  • (object)
  • (unset)

 

Programunk befejezéséhez létrehozunk egy új változót, majd használjuk a típusmegfeleltetést:

 

<?php
    
    $valtozo1 = "5"; // Létrehozunk egy változót
    // Kiiratjuk a típusát:
    echo gettype($valtozo1); // String
    echo "<br />"; // Sortörés
    
    $valtozo1 = $valtozo1 + 5;
    echo gettype($valtozo1); // Integer
    echo "<br />"; // Sortörés
    
    $valtozo1 = $valtozo1 + "10 alma";
    echo gettype($valtozo1); // Integer
    echo "<br />"; // Sortörés
    
    $valtozo1 = "A változó jelenlegi értéke: " . $valtozo1;
    echo gettype($valtozo1); // String
    echo "<br />"; // Sortörés
    
    settype($valtozo1, "integer");
    echo gettype($valtozo1); // Integer
    echo "<br />"; // Sortörés
    
    $valtozo2 = (string) $valtozo1;
    echo gettype($valtozo2); // String
    echo "<br />"; // Sortörés
    
?>

Az új változó {$valtozo2} a típusmegfeleltetésnek megfelelően létrejött és string típusú lett.

Van egy lényeges különbség a settype függvény és a típusmegfeleltetés között. Amíg a settype függvény  megváltoztatja a változó típusát, addig a típusmegfeleltetés nem. Az utolsó példában a {$valtozo1} típusa nem változott.

 

Végezetül lássuk egyben, futtatható formában a programunkat:

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Típuskonverzió</title>
</head>
<body>
    <?php
        
        $valtozo1 = "5"; // Létrehozunk egy változót
        // Kiiratjuk a típusát:
        echo gettype($valtozo1); // String
        echo "<br />"; // Sortörés
        
        $valtozo1 = $valtozo1 + 5;
        echo gettype($valtozo1); // Integer
        echo "<br />"; // Sortörés
        
        $valtozo1 = $valtozo1 + "10 alma";
        echo gettype($valtozo1); // Integer
        echo "<br />"; // Sortörés
        
        $valtozo1 = "A változó jelenlegi értéke: " . $valtozo1;
        echo gettype($valtozo1); // String
        echo "<br />"; // Sortörés
        
        settype($valtozo1, "integer");
        echo gettype($valtozo1); // Integer
        echo "<br />"; // Sortörés
        
        $valtozo2 = (string) $valtozo1;
        echo gettype($valtozo2); // String
        echo "<br />"; // Sortörés
        
    ?>
</body>
</html>

Futtatáshoz másoljuk a fenti kódot egy "tipuskonverzio.php" fájlba.

Szólj hozzá

echo gettype settype típuskonverzió