Изработка на фирмен сайт

Razberi.info се посещава от около 1000 - 1200 човека дневно. Искате банер в сайта или рекламна статия? Свържете се с нас на webselo.com/services

 

В този урок ще комбинираме знанията от досегашните и ще прехвърляме данни от един тип към друг. Ето един пример:

<?php
$a='1';
?>

Тук 1 е string, тоест PHP го възприема като текст, не като число. Можете ли да се досетите какво ще стане, ако опитаме да го съберем с някакво число? Е, да пробваме:

<?php
$a='1';
echo $a+2;
?>

По принцип такова събиране е невалидно, но PHP е интелигентен език и вижда какво се опитваме да направим, и ще се опита да прехвърли автоматично информацията от текст към число. Затова резултатът от въпросния код е 3. В конкретния пример PHP прехвърли текстът 1 (string) към integer. Обърнете внимание, че PHP винаги ще прави това, освен ако му наредим да не го прави.

Прехвърляне от текст (string) към число с плаваща запетая (float):

<?php
$a='1.15';
echo $a+2;
?>

PHP вижда, че стойността на променливата е число с плаваща запетая и го събира автоматично с другото число, което имаме по-долу.

Прехвърляне на комбинация между число и текст към число и събиране с друго число:

<?php
$a='2sdsaads';
echo $a+2;
?>

В този пример променливата е стринг и тя е приела смесена стойност с число и текст. При събирането ѝ с друга променлива буквите просто са изчезнали и крайният резултат е 4. За да разберете по-добре какво става, ще направим още един пример:

<?php
$a='2sdsaads';
$b=(int)$a;
echo $a+2;
var_dump($b);
?>

Всъщност в този пример имаме променливата $a, към която присъединяваме стринг и след това към променливата $b присвояваме стойността на променливата $a, като караме PHP насила да прехвърли тази стойност към integer. Резултатът от този код в браузъра е 4int(2). Текстът след 2 в променливата $a изчезна, тъй като буквите нямат математически аналози на тези цифри, затова PHP просто ги премахва/изтрива.

Подобно нещо можем да направим и с float, double, както и с другите типове данни в PHP:

<?php
$a='2.55sdsaads';
$b=(float)$a;
echo $a+2;
var_dump($b);
?>

Тук резултатът от var_dump в браузъра е 4.55float(2.55). Виждате, че PHP е направил сметките, премахвайки от крайното сумиране буквите, намиращи се след цифрите в променливата $a.


Какво става, ако числото е на последно място:

<?php
$a='aasdsasa3';
$b=(int)$a;
var_dump($b);
?>

В този пример функцията var_dump ни дава int(0) и това е така поради голяма особеност на програмния език PHP. Когато PHP се опитва да прехвърли от string към числов формат, той преглежда първия символ - ако той е число, го приема, но в момента, в който той види знак, различен от число или десетична запетая, той спира прочитането на целия израз до края. Това може да се разбере още по-добре със следния пример:

<?php
$a='300sadasdsdda9999999';
$b=(int)$a;
var_dump($b);
?>

Резултатът от var_dump в браузъра е int(300). Виждате ,че останалите деветки след буквите, както и самите букви, биват игнорирани. Както можете да видите сами, при това прехвърляне към другия тип данни се губи информация. Това може да се избегне и ще поговорим за това на по-късен етап.


 

Прехвърляне на число към string, да опитаме със следния програмен код:

<?php
$a=3213;
$b=(string)$a;
var_dump($b);
?>

Ето какво ни дава функцията var_dump в този пример string(4) "3213" - стринг с дължина 4 символа и стойност 3213. При прехвърляне от число към стринг никога не може да стане проблем, защото всяко едно число, без значение какво е, дали е цяло, с плаваща запетая, може да се прехвърли без никаква загуба към стринг.

Някои особености при прехвърлянето от число към текст:

<?php
$a=33.87;
$b=(int)$a;
var_dump($b);
?>

В този пример прехвърляме число с плаваща запетая, в случая стойността на променливата $a, към integer, тоест към цяло число. Резултатът от този код е следния:

int(33). Това е така, защото числото се прехвърля от такова с плаваща запетая към цяло число, а целите числа не могат да имат десетична запетая. Затова PHP изтрива всичко след десетичната запетая, без да се интересува какви стойности има там и без да ги обработва по какъвто и да е начин.

Ако искате да закръгляме стойностите , трябва да използваме функцията за закръгляне, за която ще поговорим малко по-нататък.

Да пробваме да прехвърлим стойността на цяло число към плаваща запетая:

<?php
$a=3;
$b=(float)$a;
var_dump($b);
?>

Тук резултатът, която var_dump ни дава, е float(3). В този случай нямаме загуба на информация и няма как да имаме, тъй като числата с плаваща информация могат да съдържат много повече информация, отколкото целите числа.


 

Прехвърляне към булева стойност

<?php
$a=8;
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(true).

Ако променливата има стойност 0, тогава резултатът е друг. Кодът ще изглежда по този начин:

<?php
$a=0;
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(false).

Ако имаме стринг, тоест нещо от типа на:

<?php
$a='sadasdasddsadsa';
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(true).

Ако имаме стринг (текст) като число 0, кодът ще изглежда така:

<?php
$a='0';
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(false).

Ако текстът е празен:

<?php
$a='';
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(false).

Ако променливата е празна:

<?php
$a;
$b=(boolean)$a;
var_dump($b);
?>

Резултатът от този код е bool(false).

Винаги ще получите false, ако променливата няма стойност или има стойност 0 като текст или число.

Ето още един интересен пример:

<?php
$a='false';
$b=(boolean)$a;
var_dump($b);
?>

Тук имаме самата дума false, която е като текст (стринг), но резултатът е true.

Тези правила за boolean са изключително важни, защото с boolean се правят изключително важни проверки дали нещо е станало.


 

В заключение

Когато прехвърляме текст към число, ако текстът започва с число, то бива прехвърлено и всичко след числото бива игнорирано.

Когато прехвърляме число към текст, няма никакъв проблем, няма никаква загуба на информация.

Когато прехвърляме число с плаваща запетая към integer, ние загубваме десетичната стойност.

Когато прехвърляето цяло число към друго с плаваща запетая, няма никаква загуба на информация.

Когато прехвърляте към булева стойност, ще получите false, ако променливата няма стойност или има текст 0, или числото 0, или ако променливата е записана като празен стринг, което всъщност е празна променлива.

Изработка на уебсайтове, реклама и поддръжка в социалните мрежи, копирайтинг услуги