PHP

Tip çevrilmələri

Həmişəki kimi php-beginner qovluğunda cast.php faylı yaradırıq. Bu dərsdəki bütün nümunələri cast.php faylına əlavə edib yoxlaya bilərsiniz.

Proqramlaşdırmada bəzən bir tipdə olan məlumatı başqa bir tipə çevirmək lazım gəlir.

Avtomatik tip çevrilməsi

PHP proqramlaşdırma dilində zəif tipləşdirmə tətbiq edilir, yəni skriptdə dəyişənin tipini öncədən elan etmək lazım deyil. Dəyişənə qiymət mənimsədiləndə dəyişənin tipi avtomatik müəyyənləşdirilir. Eyni bir dəyişən skriptin müxtəlif hissələrində tam ədəd, sonra həqiqi ədəd, daha sonra isə sətir və başqa tip ola bilər.

Ötən dərsdə öyrəndik ki, PHP proqramlaşdırma dili sətirlər üzərində vurma əməliyyatı aparmağa imkan vermir. Bəs əgər tam ədəddən ibarət sətirlə digər ədədi toplasaq necə?

<?php

error_reporting(-1);

$number = 10;
$str = '5';

echo $number + $str;

Nəticə:

15

PHP interpretatoru tiplərin uyğunsuzluğunu aşkar etdikdə, özü onları avtomatik olaraq lazımi tipə çevirməyə çalışır. Yuxarıdakı nümunədə interpretator ilk əvvəl '5' sətrini 5 tam ədədinə çevirir, sonra ədədlərin cəmini hesablayır.

Qeyd edim ki, ciddi tipləşdirmədən istifadə olunan dillərdə ədədlə sətrin cəmini hesablamaq mümkün deyil. PHP-də zəif tipləşdirmədən istifadə olunduğuna görə, bu mümkündür.

Aşağıda digər avtomatik tip çevrilmələri izah edilib.

Məntiqi tipə çevrilmə

Əgər operator, funksiya və ya idarəedici konstruksiya bool tipinə aid arqument tələb edirsə, dəyişənin tipi avtomatik həmin tipə çevrilir.

Məntiqi tipə çevrilmə zamanı aşağıdakı qiymətlər false hesab edilir:

  • false
  • 0
  • 0.0 və -0.0
  • boş sətir və "0" simvolundan ibarət sətir
  • boş massiv
  • null xüsusi tipi

Digər qiymətlər true hesab edilir.

<?php

error_reporting(-1);

$num = 0;

if ($num) {
    $num = $num + 1;
}

echo $num;

Nəticə:

0

if(...) operatoru dairəvi mötərizənin içərisində yazılmış ifadəni məntiqi tipə çevirir və nəticə true olduqda kod bloku icra olunur. Yuxarıdakı nümunədə $num dəyişəninin qiyməti 0-dır, yəni məntiqi tip çevrilmə zamanı false hesab edilir. Buna görə if operatorunun içərisindəki kod bloku icra olunmur və sadəcə $num dəyişəninin qiyməti - 0 ekranda göstərilir.

Gəlin $num dəyişəninin qiymətini elə dəyişək ki, o, məntiqi tipə çevrilmə zamanı true hesab edilsin:

<?php

error_reporting(-1);

$num = 14;

if ($num) {
    $num = $num + 1;
}

echo $num;

Nəticə:

15

Tam ədəd tipinə çevrilmə

Əgər operator, funksiya və ya idarəedici konstruksiya int tipinə aid arqument tələb edirsə, dəyişənin tipi avtomatik çevrilir.

Məntiqi tipdən çevrilmə

false məntiqi tipi 0-a, true isə 1-ə çevrilir:

<?php

error_reporting(-1);

$boolean = true;
$num = 0;

if (0 + $boolean) {
    $num = $num + 1;
}

echo $num;

Nəticə:

1

Yuxarıdakı nümunədə $boolean dəyişəninin qiyməti true-dur. Artıq bildiyimiz kimi if(....) operatoru dairəvi mötərizənin içərisində yazılmış ifadəni məntiqi tipə çevirir və nəticə true olduqda kod bloku icra olunur. 0 + $boolean ifadəsinin nəticəsi 1-dir, çünki $boolean dəyişənin qiyməti true-dur və bu, riyazi əməliyyatlarda avtomatik olaraq 1-ə (int tipinə) çevrilir. Buna görə if operatorunun içərisindəki kod bloku icra edilir və $num dəyişəninin qiyməti ekranda göstərilir.

Sətir tipindən çevrilmə

Əgər sətir tam ədəddən ibarətdirsə, onda o, riyazi əməliyyatlarda tam ədəd tipinə çevrilir:

<?php

error_reporting(-1);

$x = 3;
echo $x + '10';

Nəticə:

13

Yuxarıdakı nümunədə PHP interpretatoru '10' sətrini avtomatik olaraq ədədə çevirərək toplama əməliyyatını icra edir.

NULL xüsusi tipindən çevrilmə

null xüsusi tipi həmişə 0 tam ədədinə çevrilir.

Sətir tipinə çevrilmə

Sətir tipli ifadələrdə avtomatik çevrilmə baş verir.

true məntiqi tipi 1-ə, false isə boş sətrə ("") çevrilir:

<?php

error_reporting(-1);

$boolean = true;
$str = $boolean . ' alma';
echo $str .  '<br>';
echo gettype($str);

Nəticə:

1 alma
string

Sətir tipli ifadələrdə tam və həqiqi ədədlər sətir tipinə çevrilir:

<?php

error_reporting(-1);

$integer = 5;
$float = 15.5;
$str1 = $integer . ' alma';
$str2 = $float . ' sm';

echo $str1 .  '<br>';
echo $str2 .  '<br>';
echo gettype($str1) . '<br>';
echo gettype($str2) . '<br>';

Nəticə:

5 alma
15.5 sm
string
string

Avtomatik tip çevrilməsi bir tərəfdən həqiqətən rahatdır. Amma bu, təcrübədə çoxlu səhvlərə və çətin tapılan problemlərə gətirib çıxara bilər.

Dəyişənin tipini özün təyin et

Dəyişənin tipini özümüz də təyin edə bilərik:

(çevriləcək tipin adı) dəyişən
  • (int), (integer) - int tipinə çevrilmə
  • (bool), (boolean) - bool tipinə çevrilmə
  • (float), (double), (real) - float tipinə çevrilmə
  • (string) - string tipinə çevrilmə
  • (array) - array tipinə çevrilmə
  • (object) - object tipinə çevrilmə
<?php

error_reporting(-1);

$x = 12.5;
echo (int)$x + 10;

Nəticə:

22

Yuxarıdakı nümunədə $x dəyişəninin qiyməti 12.5-dir (float tipi). Növbəti sətirdə onu int tipinə çeviririk, yəni $x dəyişəninin qiyməti 12 olur və toplama əməliyyatının nəticəsi ekranda göstərilir.

Dərsin kodlarını github-dan köçürə bilərsiniz.

0
Çalışmalara (1) giriş əldə etmək üçün hesabınıza daxil olun.

Şərh yazmaq üçün hesabınıza daxil olun.