Duomenų tipai
Skirtingi duomenų tipai naudoja skirtingą atminties kiekį ir skripte gali būti apdorojami skirtingai, todėl kai kuriose programavimo kalbose reikalaujama, kad programuotojas iš anksto nurodytų, kokį duomenų tipą saugos kintamasis. PHP kalboje, priešingai, yra laisvas tipų priskyrimas, t.y. duomenų tipas nustatomas, kai kintamajam priskiriami duomenys. Šis automatinis tipo priskyrimas yra prieštaringai vertinamas. Iš vienos pusės, tai reiškia, kad kintamieji gali būti naudojami lanksčiai — vienu metu kintamajame gali būti saugoma eilutė, o vėliau sveikasis skaičius ar kitas duomenų tipas. Kita vertus, šis lankstumas gali sukelti problemų didesniuose skriptuose; jei jums reikia kintamojo, kuriame saugomi konkretaus duomenų tipo duomenys, o iš tikrųjų jame saugomi visai kitokie duomenys. Pavyzdžiui, tarkime, kad sukūrėte kodą, naudojantį masyvo tipo kintamąjį. Jei vietoje to šiame kintamajame saugoma skaitinė reikšmė ir nėra masyvo struktūros, bandant vykdyti masyvui būdingas operacijas, bus grąžintos klaidos.
Tipas | Pavyzdys | Aprašas |
---|---|---|
Boolean (loginė reikšmė) | true | Viena iš specialiųjų reikšmių true arba false |
Integer (sveikasis skaičius) | 10 | Sveikasis skaičius |
Float arba Double | 4,6842 | slankiojo kablelio skaičius |
String (eilutė) | "sveiki, maze lankytojai" | Simbolių rinkinys |
Object (objektas) | klasės egzempliorius | |
Array (masyvas) | sutvarkyta raktų ir reikšmių aibė | |
Resource (ištėkliai) | nuoroda į svetimus išteklius |
Ištekliu tipo kintamuosius dažnai grąžina funkcijos, dirbančios su išorinėmis taikomosiomis programomis ar failais. PHP yra keletas funkcijų, galinčių patikrinti konkretaus tipo kintamojo tinkamumą — tiesą sakant, kiekvienam tipui po vieną funkciją. Tai funkcijų is_* šeima, pvz., is_boo1 () patikrina, ar nurodyta reikšmė yra loginė reikšmė.
- <?php
- $testing; // sukuriamas kintamasis kuris neturi reikšmės
- echo "is null? ".is_null($testing); // patikrina ar tai nulis
- echo "<br/>";
- $testing = 5;
- echo "is an integer? ".is_int($testing); // patikrina ar tai sveikasis skaičius
- echo "<br/>";
- $testing = "five";
- echo "is a string? ".is_string($testing); // patikrina ar tai eilutė
- echo "<br/>";
- $testing = 5.024;
- echo "is a double? ".is_double($testing); // patikrina ar turi slankiojo skaiciaus kableli
- echo "<br/>";
- $testing = true;
- echo "is boolean? ".is_bool($testing); // patikrina ar tai logine reiksmė
- echo "<br/>";
- $testing = array('apple', 'orange', 'pear');
- echo "is numeric? ".is_numeric($testing); // patikrina ar tai skaičius
- echo "<br/>";
- echo "is a resource? ".is_resource($testing); // patikrina ar tai ištėkliai
- echo "<br/>";
- echo "is an array? ".is_array($testing); // patikrina ar tai masyvas
- echo "<br/>";
- ?>
Išsaugokite šias eilutes faile ir įkelkite jį į savo serverio dokumentų katalogą. Skriptą paleidus naršyklės pagalba, grąžinama tokia išvestis: is null? 1 is an integer? 1 is a string? 1 is a double? 1 is boolean? 1 is an array? 1 is numeric? is a resource? is an array? 1
Aprašydami $testing kintamąjį antroje eilutėje, mes nepriskyrėme jam reikšmės, todėl 3-ioje eilutėje patikrinama, ar kintamasis yra null tipo. Grąžinama reikšmė 1 (true). Po to prieš patikrindami atitinkamas is_* funkcija, naudodami = ženklą, kintamajam $testing priskiriame reikšmes. 5-oje eilutėje kintamajam $testing priskiriamas sveikasis arba realusis skaičius. Paprasčiau sakant, sveikasis skaičius tai skaičius be kablelio. 8-oje eilutėje kintamajam testing priskirta eilutė (string) yra simbolių rinkinys. Kai skripte naudojate eilute, ji visada turi būti rašoma tarp viengubų arba dvigubų kabučių (" arba `). 11-oje eilutėje kintamajam $testing priskirtas slankiojo kablelio skaičius (double) tai skaičius su kableliu. Loginė reikšmė (boolean), $testing kintamajam priskirta 14-oje eilutėje, gali igyti vieną iš dviejų specialiųjų reikšmių: true arba false. 17-oje eilutėje, naudojant funkciją array o sukuriamas masyvas. Šiame konkrečiame masyve yra trys elementai, ir skriptas pareigingai praneša, kad $testing tipas yra „masyvas". Nuo 20-os eilutės iki skripto pabaigos kintamajam $testing nauja reikšmė nepriskiriama, o tik tikrinamas jo tipas. 20-oje ir 22-oje eilutėse tikrinama, ar $ testing. yra skaičiaus ar ištekliaus tipo. Kadangi taip nėra, vartotojui nepateikiama jokia reikšmė.
Tipo keitimas naudojant settype() funkciją
PHP taip pat yra funkcija settype (), kurią naudojant galima pakeisti kintamojo tipą. Norėdami naudoti settype () , skliausteliuose įrašykite norimą pakeisti kintamąjį bei norimą kintamojo tipą ir atskirkite juos štai taip: settype($norimaspakeistikintamasis, `naujas tipas');
- <?php
- $undecided = 3.14;
- echo "is ".$undecided." a double? ".is_double($undecided)."<br/>"; // slankiojo skaičiaus
- settype($undecided, 'string');
- echo "is ".$undecided." a string? ".is_string($undecided)."<br/>"; // eilutė
- settype($undecided, 'integer');
- echo "is ".$undecided." an integer? ".is_integer($undecided)."<br/>"; // sveikasis skaičius
- settype($undecided, 'double');
- echo "is ".$undecided." an double? ".is_double($undecided)."<br/>"; // slankiojo kablelio skaičius.
- settype($undecided, 'double');
- echo "is ".$undecided." a boolean? ".is_bool($undecided)."<br/>"; // loginė reikšmė
- ?>
Kiekvienu atveju naudojame is_* funkciją, norėdami įsitikinti, koks yra duomenų tipas, ir naudodami echo perduodame $undecided kintamojo reikšmę naršyklei. Kai 6-oje eilutėje keičiame "3.14" i sveikaji skaičių, informacija, esantu po kablelio, prarandama visam laikui. Štai kodel 8-oje eilutėje kintamąjį $undecided pakeitus į slankiojo kablelio skaičių, jo reikšmė yra 3. Galiausiai 10-oje eilutėje $undecided pakeičiame į loginę reikšmę. Bet koks skaičius išskyrus 0, verčiant logine reikšme, tampa true. PHP spausdinant loginę reikšmę true, ji atvaizduojama 1, o false tuščią eilute. Todėl 11-oje eilutėje atspquzdinama $undecided reikšmė yra 1.
Išsaugojus šias eilutes mes naršyklėje matysime:
is 3.14 a double? 1
is 3.14 a string? 1
is 3 an integer? 1
is 3 a double? 1
is 1 a boolean? 1
Jei patiko paspauskit like. ;-)
Orintas prieš 9 metus
Nesuprantu, kam tie Basic'ai? :D Pilnas internetas vienodų pamokų, nenorėtum sukurti kažko įdomesnio, kas susiją pavydžiui su OOP, fw, įvairių sistemų sukūrimas, pavydžiui kaip sukurti tą ar ana, arba apie saugumą pakalbėtum, nes šitą tai ....
anyway, bent kažką darai
Orintas prieš 9 metus
na taip, bet išesmės tu gaiši savo laiką, basic'ų internete pilną, o rimtesnių pamokų, žymiai mažiau.
Amazing prieš 9 metus
Pakankamai viskas aiškiai išdėstyta, o kas svarbiausia lietuviškai. Pats esu perėjęs ne vieną kursą codeacademy.com, bet kažką suprastum reikia išties pagalvot.