| ÖNCEDEN TANIMLI FONKSİYONLAR |  |  |  |
PHP'nin gettype() ve print() gibi, kendi içinde
bulunan kullanılmaya hazır bir çok fonksiyonu vardır. Daha sonra kendi
fonksiyonlarımızı yazmanın yollarını da göreceğiz. Programcılık dilinde ister
dile ait olsun, ister kendimiz yazmış olalım, bir fonksiyonu kullanmaya
"fonksiyon çağırma" denir. Fonksiyonlar da fonksiyon çağırabilirler. Çağrılan
bir fonksiyon ya kendisinden beklenen işi yapar, ya da kendisini çağıran işleme
veya fonksiyonu bir değer sunar. Buna fonksiyondan dönen değer denir.
Şimdi, bir PHP programı yazalım, bir takım
değişkenlere değerler atayalım ve bunların türlerini PHP'ye soralım. Bir düzyazı
programı ile şu metni yazın ve turler.php adıyla kaydedin:
<HTML>
<HEAD>
<TITLE>PHP'de Degisken Turleri</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<B>
<H2>
<?php
$sayi = 5;
print("Birinci değişkenin adı: \$sayi<br>");
print("Değeri : ");
print "$sayi<br>";
print("Türü : ");
print gettype( $sayi ) ; //tamsayi/integer
print "<br>";
print "<br>";
$alfanumerik = "Reşit";
print "İkinci değişkenin adı: \$alfanumerik<br>";
print "Değeri : ";
print "$alfanumerik<br>";
print("Türü : ");
print gettype( $alfanumerik ) ; //alfanümerik/string
print "<br>";
print "<br>";
$ondalik = 5.1234;
print "Üçüncü değişkenin adı: \$ondalik<br>";
print "Değeri : ";
print "$ondalik<br>";
print("Türü : ");
print gettype( $ondalik ) ; //çift,ondalık/double
print "<br>";
print "<br>";
$mantiksal = true;
print "Üçüncü değişkenin adı: \$mantiksal<br>";
print "Değeri : ";
print "$mantiksal<br>";
print("Türü : ");
print gettype( $mantiksal ) ; //mantıksal/boolean
print "<br>";
print "<br>";
?>
</H2>
</B>
</BODY>
</HTML>
Burada mantıksal (boolean) değer olarak doğru
anlamına true değeri atadığımız halde, PHP'nin bu değişkenin değeri olarak 1'i
gösterdiğine dikkat edin. PHP'de bir fonksiyon, elde ettiği değer doğru ise
sonuç olarak 1 değerini verir.
Escape Karakterleri
"turler.php" dosyasını yazdıysanız, şu satırdaki,
ters-bölü işareti dikkatinizden kaçmamış olmalı:
print "İkinci değişkenin adı: \$alfanumerik<br>";
Daha önce gördük ki, tek veya çift tırnak içine de
alsak, PHP, bir değişken adını gördüğü zaman onun yerine o değişkenin tuttuğu
değeri yazar. PHP bunu, değişken adının başındaki $ görerek yaparak. $ işareti
gibi PHP için özel anlamı olan işaretlerin anlamlandırılmasını önlemek ve bu
işaretleri düz metin saymasını sağlamak için bu işaretlerin önüne ters-bölü
işareti koyarız. Buna o karakteri kurtarma veya ESCaping denir. PHP'nin anlamlı
işaretleri ve bunların ESCape-yazılışı şöyledir:
| \' |
Tek tırnak |
| \" |
Çift tırnak |
| \\ |
Ters-bölü |
| \$ |
Dolar işareti |
| \n |
Yeni Satır (New Line) |
| \r |
Satır Başı (Return) |
| \t |
Sekme (Tab) karakteri |
Kimi zaman bir değişkene atadığımız değerin türünü
değiştirmek gerekir. Bunu settype() fonksiyonu ile yaparız. Şu örneği de
tur_degistir.php adıyla kaydedelim:
<HTML>
<HEAD>
<TITLE>PHP'de Degisken Turleri</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<B>
<H2>
<?php
$degisken = 5.67890;
print("Değişkenin değeri : ");
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print "<br>";
print "<br>";
print "İlk değiştirme işlemi: Alfanümerik/String:<br>";
settype( $degisken, string ); //alfanümerik/string
print "Değeri : ";
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; //alfanümerik/string
print "<br>";
print "<br>";
print "İkinci değiştirme işlemi: Tamsayı/Integer:<br>";
settype( $degisken, integer ); //Tamsayı/Integer
print "Değeri : ";
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; //Tamsayı/Integer
print "<br>";
print "<br>";
print "Üçüncü değiştirme işlemi: Ondalık/Double:<br>";
settype( $degisken, double ); //çift,ondalık/double
print "Değeri : ";
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print "<br>";
print "<br>";
print "Dördüncü değiştirme işlemi: Mantıksal/Boolean:<br>";
settype( $degisken, boolean ); // Mantıksal/Boolean
print "Değeri : ";
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; // Mantıksal/Boolean
print "<br>";
print "<br>";
?>
</H2>
</B>
</BODY>
</HTML>
Bu programı çalıştırdığımızda, ilk atadığımız
değerin ondalık/double olarak belirlendiğine dikkat edin. Bu değerin türünü
alfanümerik/string olarak değiştirdiğimizde değişmediğini görüyoruz. Fakat
tamsayı/integer'a çevirdiğimizde PHP değerin tamsayı bölümünü alıyor;
ondalık-kesir bölümünü atıyor. Nitekim daha sonra değişkerin türünü yeniden
ondalık yaptığımız halde, atılan bu bölüm geri gelmiyor. Son olarak değişkeni
mantıksal ifade olarak değiştirdiğimizde, değerin doğru/true olduğunu anlıyoruz;
değer olarak bize 1 dönüyor. PHP, sıfır dışındaki tüm değerleri doğru/true'ya
çevirir; sıfır'ı ise yanlış/false olarak atar ve boş/null değer verir.
Değişkeni bir daha düzelmeyecek şekilde
değişikliğe uğratmak istemeyebiliriz; fakat yine de değerinin türünü değiştirmek
isteyebiliriz. Bunu da nerede kullanabiliriz, şu anda bilmiyoruz. Ama diyelim
ki, böyle bir işlem yapmaya ihtiyacımız oldu! Biraz önce özel bir şekilde bir
değişkene başka bir değişkenin adını değer olarak vererek, aslında bu değişkenin
ilk değişkenin değerini almasını sağlamıştık. Burada da aynı tekniği
kullanabiliriz. Bu kodu da tur_kopyala.php adıyla kaydedin:
<HTML>
<HEAD>
<TITLE>PHP'de Degisken Turleri Kopyalama (Casting)</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<B>
<H2>
<?php
$degisken = 3.1418;
print("Değişkenin değeri : ");
print "$degisken<br>";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print "<br>";
print "<br>";
print "İlk kopyalama işlemi: Alfanümerik/String:<br>";
$kopya_degisken = ( string ) $degisken; //alfanümerik/string
print "Değeri : ";
print "$kopya_degisken<br>";
print("Türü : ");
print gettype( $kopya_degisken ) ; //alfanümerik/string
print "<br>";
print "<br>";
print "İkinci kopyalama işlemi: Tamsayı/Integer:<br>";
$kopya_degisken = ( integer ) $degisken; //Tamsayı/Integer
print "Değeri : ";
print "$kopya_degisken<br>";
print("Türü : ");
print gettype( $kopya_degisken ) ; //Tamsayı/Integer
print "<br>";
print "<br>";
print "Üçüncü değiştirme işlemi: Ondalık/Double:<br>";
$kopya_degisken = ( double ) $degisken; //çift,ondalık/double
print "Değeri : ";
print "$kopya_degisken<br>";
print("Türü : ");
print gettype( $kopya_degisken ) ; //çift,ondalık/double
print "<br>";
print "<br>";
print "Dördüncü kopyalama işlemi: Mantıksal/Boolean:<br>";
$kopya_degisken = ( boolean ) $degisken; // Mantıksal/Boolean
print "Değeri : ";
print "$kopya_degisken<br>";
print("Türü : ");
print gettype( $kopya_degisken ) ; // Mantıksal/Boolean
print "<br>";
print "<br>";
?>
</H2>
</B>
</BODY>
</HTML>
Bu programın can alıcı noktası örneğin
"$kopya_degisken = ( boolean ) $degisken;" şeklindeki komut; burada
$kopya_degisken adlı değişkene $degisken adlı değişkenin değerini (eşittir
işareti ile) kazandırırken, arada yeni değişkenin kazanmasını istediğimiz türün
adını parantez içinde yazıyoruz. Burada gerçekte, $degisken adlı değişkenin
değerine hiç bir şey olmuyor. Bu programı çalıştırırsanız, ilk değerin ontalık
kısmının önceki örnekte olduğu gibi değişim işlemi sonunda tamamen yok
olmadığını görebilirsiniz.
$degisken adlı değişkenin değeri değişmeden
durduğu için üçüncü adımda yıptığımız ondalık tür olarak kopyalama sonucu yeni
değişkenin değeri yine kesiri ile karşımıza çıkıyor.
Dört yararlı fonksiyon
PHP'de değişken değer türü değiştirmekte
kullanabileceğimiz kullanılmaya hazır fonksiyon vardır. İlerde döngüleri ele
aldığımızda daha çok anlam kazanacak olan bu değişkenleri şimdilik bir kenara
kaydedin:
isset() ve unset()
PHP, bir değişken tanımlandığı anda, sanki içinde
değer varmış gibi, bilgisayarın belleğinde yer ayırır. Bu bazen bilgisayarın kıt
kaynaklarını zorlayabilir. isset() fnksiyonu, PHP'nin bir değişkenin içinde
değer bulunup bulunmadığını sınamasını sağlar. unset() ise varolan bir
değişkeni yok eder. Bu iki fonksiyonu birlikte kullanabiliriz ve boş
değişkenleri yok ederek, bilgisayarın belliğinde yer açabiliriz:
if (isset($bir_degisken))
{
print( $bir_degisken );
}
else
{
unset($bir_degisken);
}
Bu kod parçası, $bir_degisken isimli dğişkenin içi
boş değişse, içeriğini görüntüleyecek, içi boş ise varlığına son verecektir.
empty()
isset() fonksiyonun tersi işleve sahiptir; bir
değişkene değer atanmamışsa, veya değeri sıfır veya boş alfanümerik (null
string) ise, doğru (True) değeri verir.
$bir_degisken = 123;
echo empty($bir_degisken);
$bir_degisken = "";
echo empty($bir_degisken);
Bu program parçası Browser penceresine sadece
empty() fonksiyonun doğru sonuç verdiği birinci echo() deyiminde 1
yazdıracaktır.
is_string(),is_integer(),is_double(),
Sınadıkları değişkenin aradıkları türden değer
içermesi halinde doğru (True) sonuç verirler.
<?php
$a = 6.567;
if (is_double($a))
{
print ("A Double'dır<br>");
}
$b = "Reşit";
if (is_double($a))
{
print ("B String'dir<br>");
}
$c = 6;
if (is_int($c))
{
print ("C Integer'dır<br>");
}
?>
Bu kod, Browser penceresine "A double'dır, B
String'dir, C Integer'dır" yazdıracaktır. PHP'de bu fonksiyonlara benzeyen
fakat başka tür değer arayan şu fonksiyonlar da vardır: is_array(), is_object.
intval() ve doubleval()
Bir değişkenin değerinin türünü başka bir türe
çevirmeye yararlar. intval(), ortaya çıkartacağı tamsayı değişkenin 10 tabanlı
(decimal) veya 16 tabanlı (hexadecimal) olmasını sağlayan ikinci bir argüman
alabilir:
<?php
$a = "123ABC";
$b = inval($a, 16);
print ($b);
?>
Bu program Browser penceresine, 123'ün hexadecimal
ifadesi olan "1194666" yazdıracaktır.