PHP’de Operatörler

Operatörler, yaptıkları işlere göre gruplandırılmıştır. PHP’de kullanılan operatör gruplarını listeleyecek olursak;

  • Bit işlem operatörleri
  • Mantıksal operatörler
  • Atama operatörleri
  • Bitsel atama operatörleri
  • Karşılaştırma operatörleri
  • Aritmetik işlem operatörleri
  • Arttırma ve eksiltme operatörleri
  • Dizi operatörleri
  • Özel operatörler

 

Ayrıca operatörleri aldıkları operand sayısına göre de gruplandırmak mümkündür. Operand, bir işleme katılan data çeşidi, büyüklük ve çokluk anlamına kullanılır. Örneğin; toplama işlemini gerçekleştiren + bir operatörken bu operatörün solunda ve sağında yer alan sayılar birer operand’dırlar. Operand genellikle bir instruction’un (talimatın) adres bölümü için kullanılır. Fakat bir sonuç veya parametre, işletilecek bir sonraki instruction (talimat) için adres veya isim göstergesi olabilir. 

 

Operatörleri aldıkları operand sayısına göre de gruplandıracak olursak;

Unary (tekli) : Tek operand alan operatörler.

Binary (ikili) : Çift operand alan operatörler.

Ternary (üçlü) : Üç operand alan operatörler.

 

Operatörler iç içe veya aynı anda kullanılacakları zaman, yazılımsal olarak her operatör için önceden atanmış olan bir işlem önceliği sırası bulunmaktadır.

 

Bit İşlem Operatörleri

Bit işlem operatörleri Boolean yani mantıksal işlemler gerçekleştirmek için kullanılır. 2 sayısal operand alır ve bunları karşılaştırır. 

3- Operatörler 1

Bit işlem operatörleri özellikle şifreleme işlemlerinde yani kriptografide kullanılırlar.

 

Mantıksal Operatörler

Mantıksal operatörler birden fazla koşuldan / şarttan oluşan bir yapıyı oluşturmak için kullanılır. İki veya daha fazla operandın koşulları / şartları değerlendirilir, sonuç true (doğru / olumlu / geçerli / başarılı) veya false (yanlış / olumsuz / geçersiz / başarısız) olarak geri döndürülür. Mantıksal operatörleri inceleyecek olur isek;3- Operatörler 2

 

Atama Operatörleri

Bir değişkene değer atamak için kullanılır.3- Operatörler 3

 

Bitsel Atama Operatörleri

Bir değişkene bit düzeyli değer atamak için kullanılırlar. 

3- Operatörler 4

Bu operatörler yazılımda çok sık kullanılmayan ancak genellikle kriptografi işlemlerinde kullanılan operatörlerdir.

 

Karşılaştırma Operatörleri

PHP’de en sık kullanılan operatörlerden olup, operatörün her iki tarafında yer alan operandları karşılaştırarak bir koşul oluşturulmasını sağlarlar. Sonuç ise boolean türünde True ya da False olarak geri döndürülür.

3- Operatörler 5

Burada dikkat edilmesi gereken hassas nokta eşitlik karşılaştırması ile denklik karşılaştırması arasındaki farklılıktır. 

“8”==8 eşitlik karşılaştırması ilk değer metin(string) türünde ikincisi tamsayı(integer) türünde olmasına rağmen sadece değer karşılaştırması yaparak True (doğru) sonucunu döndürür.

Oysa; “8”===8 denklik karşılaştırması False (yanlış) sonucunu döndürür. Çünkü denk olabilmeleri için hem değerlerinin hem de veri türlerinin aynı olması gereklidir.

 

Aritmetik İşlem Operatörleri

Matematiksel işlemleri gerçekleştirmeyi sağlayan operatörlerdir.

3- Operatörler 6

 

Arttırma Eksiltme Operatörleri

Bir değişkenin değerini önceden ya da sonradan arttırmak ya da azaltmak için kullanılır.

3- Operatörler 7

Genelde döngülerde kullanılır.

 

Dizi Operatörleri

İki veya daha fazla diziyi birleştirmek ya da karşılaştırmak için kullanılan operatörlerdir. Birleştirme işleminde sonuç yeni bir dizi olarak döndürülür. Karşılaştırma da ise anahtar ve değer çiftleri ile birlikte sıra ve veri türleri de değerlendirilir. Karşılaştırma sonucu boolean türünde True ya da False olarak döndürülür. 

3- Operatörler 8

Birleştirme işleminde aynı anahtara sahip değerlerin ilkinin birleştirilen diziye alındığına dikkat ediniz. Yukarıdaki birleştirme işleminde de göreceğiniz üzere Meyve değişkeninin değeri ilk değeri olacaktır. Birleştirme işleminde birinci dizideki anahtarlar korunur. Bir anahtar iki dizide de mevcutsa birincisi kullanılır ikinci dizideki yok sayılır.

Şöyle örnekleyelim.

<?php

$a = array('meyve' => 'elma','sebze' => 'domates');
$b = array('meyve' => 'kiraz', 'baklagil' => 'barbunya');
$c=$a+$b;
$d=$b+$a;

echo $c['meyve'];
echo "<br />";
echo $d['meyve'];

?>

kodu için çıktı şu şekilde olacaktır:

elma

kiraz

Birleştirme işlemi ile ilgili aynı kural anahtar – değer ikilileri şeklinde verilmemiş olan diziler için de geçerlidir. Şöyle ki; anahtar – değer ikilileri şeklinde verilmemiş diziler de her ne kadar dizide görüntülenmeseler de indis – değer şeklindedir. Yani iki diziyi birleştirirken her iki dizide aynı indise sahip değerlerden ilki alınacak diğeri görmezden gelinecektir. O nedenle eğer anahtar – değer ikilileri şeklinde verilmemiş iki diziyi birleştirmek isterseniz  birleşime ikinci dizinin ilk diziyle eşit sayıda olan kadar değerinin alınmadığını ya da hiç alınmadığını, ancak ikinci dizinin eleman sayısı birinciden fazla ise bu fark sayısı kadar olan elemanlarının alındığını göreceksiniz.

Örneğin yukarıdaki 2 dizi anahtar – değer ikilileri olarak verilmemiş olsaydı, iki dizinin eleman sayısı aynı olduğu için ve iki dizinin birleşiminde aynı indise sahip ikinci dizinin elemanları dahil edilmeyeceği için sadece ilk dizinin elemanları ile sınırlı olacaktı.

<?php

$a = array('elma','domates');
$b = array('kiraz','barbunya');
$c=$a+$b;

for($i=0;$i<count($c);$i++){echo $c[$i]," ";}

?>

kodu için çıktı şu şekilde olacaktır:

elma domates

Eğer ikinci dizinin elemanları birinci diziden farklı sayıda olur ise bu durumda indisleri farklı olan elemanların değerleri birleşime girecektir.

<?php

$a = array('elma','domates');
$b = array('kiraz','barbunya','süt');
$c=$a+$b;

for($i=0;$i<count($c);$i++){echo $c[$i]," ";}

?>

kodu için çıktı şu şekilde olacaktır:

elma domates süt

Diziler içinde hem anahtar – değer ikilileri hemde indisle yer alan değerler olabilir. Bu durumda yine aynı kurala göre birleştirme işlemi gerçekleşecektir.

<?php

$dizi1 = array("renk" => "kırmızı", 2);
$dizi2 = array("a", "b", "renk" => "mavi", "şekil" => "üçgen", 4);
$birlesim = $dizi1 + $dizi2;

foreach($birlesim as $eleman) {echo $eleman." ";}

?>

kodu için çıktı şu şekilde olacaktır:

kırmızı 2 b üçgen 4

İkinci dizideki elemanları birinci diziye eklerken, birinci dizideki elemanların üzerine yazılmaması ve yeniden indislenmemesi için + dizi birleştirme operatörü kullanılır. Böylece birinci dizideki anahtarlar korunur ve bir anahtar iki dizide de mevcutsa birincisi kullanılır, ikinci dizideki yok sayılır.

Bu durumun alternatifi olarak iki diziyi birleştirmek için kullanılan array_merge() fonksiyonu da mevcuttur. Bu fonksiyon belirtilen dizilerin elemanlarını bir öncekinin elemanlarının ardına eklemek suretiyle yeni bir dizi oluşturur ve bu diziyi döndürür. Bunu yaparken eğer dizilerde aynı anahtara sahip değerler varsa sonraki dizinin değeri öncekinin yerine konur. Ancak, eğer diziler indisli elemanlara sahipse sonraki değer öncekinin üzerine yazılmaz, sona eklenir. Yukarıdaki örneği array_merge fonksiyonu ile yapacak olursak;

<?php

$dizi3 = array("renk" => "kırmızı", 2);
$dizi4 = array("a", "b", "renk" => "mavi", "şekil" => "üçgen", 4);
$birlesim2 = array_merge($dizi3,$dizi4);

foreach($birlesim2 as $eleman) {echo $eleman." ";}

?>

kodu için çıktı şu şekilde olacaktır:

mavi 2 a b üçgen 4

Gördüğünüz gibi ikinci dizideki 0 indisine sahip değer birinci dizide aynı indise sahip değer olduğu için göz ardı edilmedi ve aynı anahtara sahip renk değişkeninin değeri son dizideki değer oldu.

Diziler ile ilgili daha pek çok hazır fonksiyon mevcuttur ancak bu ilerleyen derslerde göreceğimiz konulardandır. 

Daha önce karşılaştırma operatörlerinde olduğu gibi dizilerde de eşitlik == operatörü ile denklik === operatörü arasındaki farka dikkat ediniz. Eşitlik operatöründe dizi elemanlarının sırası önemli değilken, denklik operatöründe her iki dizinin anahtar ve değer ikilileri ile birlikte, sıralarının ve veri türlerinin de aynı olması beklenir.

 

Özel Operatörler

Herhangi bir gruba dahil olmayan ve özel amaçlarla kullanılan operatörlerdir.

OperatörTanımAçıklamaÖrnek
.Birleştirme operatörüİki veya daha fazla değeri birleştirmek için kullanılır.
$a= “Oben ” . “Seven”;
Sonuç:
$a = “Oben Seven”;
$a = “Oben “;
$b = $a . “Seven”;

Sonuç:
$b = “Oben Seven”;
$a = “Oben “;
$b = “Seven”;
$c = $a . $b;

Sonuç:
$c = “Oben Seven”;
,Virgül/Ekleme OperatörüBirbiri ardına sırayla eklenecek işlemleri veya değerleri bildirmek için kullanılır.$a = array(“mavi”,”kırmızı”);
Çalıştırma Operatörü/ Ters Tırnak OperatörüDeğerlerin komut olarak algılanmasını ve çalıştırılmasını sağlar.′ping -n 3 “google.com.tr”′;
Sonuç;
PING google.com.tr (216.58.213.99): 56 data bytes
64 bytes from 216.58.213.99: icmp_seq=0 ttl=56 time=26.305 ms
64 bytes from 216.58.213.99: icmp_seq=1 ttl=56 time=30.821 ms
64 bytes from 216.58.213.99: icmp_seq=2 ttl=56 time=27.495 ms— google.com.tr ping statistics —
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 26.305/28.207/30.821/1.911 ms
Kaçırma OperatörüBir karakterin önüne yazıldığında ilgili karakterin işlev kazanmasını sağlar ancak yaygın kullanım şekli ilgili karakterin kodlama karakteri olarak algılanmadan metin olarak yazılmasını sağlamaktır.⧹ifade
⧹’ (tek tırnak yazdırır)
⧹” (çift tırnak yazdırır)
⧹⧹ (ters slash yazdırır)
$a = “Oben Seven”;
$b = “$a”;
$c = “⧹$a”;
Sonuç;
$b = “Oben Seven”;
$c = #a;
@Hata Denetim OperatörüKodun çalıştırılması esnasında ortaya çıkabilecek hata kodu iletisinin yok sayılması için kullanılır.@mysqli_query();
opubli@file();
@include();
newYeni OperatörüYeni bir nesne oluşturmak için kullanılır.$a = new Object();
thisBu OperatörüOluşturulan bir nesneyi işaret etmek için kullanılır.class Uyeler{
public $ad = “Oben”;
public $soyad = “Seven”;
function bilgi($uyeAd=”Ayberk”,$uyeSoyad=”Seven”){
$this -> ad=$uyeAd;
$this -> soyad=$uyeSoyad;
};$kisi = new Uyeler();
echo $Kisi -> ad . $Kisi -> soyad . “<br>”;
$Kisi -> bilgi();
echo $Kisi -> ad . $Kisi -> soyad . “<br>”;
$Kisi -> bilgi(“Mert”,”Demir”);
echo $Kisi -> ad . $Kisi -> soyad ;}
Sonuç;
Oben Seven
Ayberk Seven
Mert Demir
instanceofÖrnek Oluşturma OperatörüHerhangi bir PHP değişkeninin belli bir sınıfın nesnesi olup olmadığını anlamak için kullanılır. Sonuç true/false şeklinde döner.class Uyeler{
public Sisimsoyisim = “Oben Seven”;
}
SKisi = new Uyeler0;
var_dump($Kisi instanceof Uyeler);
Sonuç : true
Skisi = “Oben Seven”
var_dump(Skisi instanceof Uyeler);
Sonuç: false
?:Koşullu OperatörKosullu operatör aynı zamanda ternary (üçlü) operatörü olarak da adlandınlır. Program akışında bir şarta bağlı olarak iki ifadeden birisi çalıştırılmak istendiği durumlarda kullanılır. Serbest olarak çalışabildiği gibi, aynı zamanda değişkene değer ataması işlemlerinde de kullanılabilir.
Koşul sonucu true degeri döner ise, ? (soru işaret) alanından sonra belirtilen ifade çalışır. Koşul sonucu false degeri döner ise, : (iki nokta üst üste) alanından sonra belirtilen ifade çalışır.

(koşul) ? ifade1 : ifade2;

$a = “Oben”;

$b = ($a == “Oben”) ? “Evet”: “Hayir”;

$c = $b;

Sonuç;
$c = “Evet”;

$a = “Oben”;

$b = ($a == “Hakan”) ? “Evet”: “Hayir”;

$c = $b;

Sonuç;
$c = “Hayır”;

??Null Birleştiricisi / OperatörüNull birleştiricisi / operatörü, ternary (üçlü) operatörüne çok benzer ve aynı şekilde program akışında bir şarta bağlı olarak iki ifadeden birisi çalıştırılmak istendiği durumlarda kullanılır. Fakat bu operatördeki şart “‘Null” dır. (boş / değer almayan) isset() fonksiyonu ile birlikte üçlü olarak kullanımı kod olarak kısaltmak için eklenmiştir. Koşul sonucunda geçerli bir değer döner ise, belirtilen değer aynen geçerli olur. Koşul sonucu Null (boş / degeri olmayan) değeri döner ise, ?? (iki) soru işaret) alanından sonra belirtilen değer geçerli olur.

$a = isset($_POST[“isim”]) ? $_POST(“isim”) : “İsim yok”;

$a = $_POST[“isim”] ?? “İsim yok”;

<=>Uzay Gemisi (Spaceship) OperatörüSpaceship (Uzay gemisi) operatörü) aslında bir karşılaştırma operatörüdür. Fakat karşılaştırma sonucundaki değer boolean (mantıksal) veri türünde dönmediği için özel operatôrler arasında yer alır. Karşılaştırma sonucunda, ilk değer ikinci degere eşit ise 0, ilk değer ikinci değerden küçuk ise -1, ilk değer ikinci değerden büyük ise 1 degeri döndürür.8<=>8
Sonuç : 0

5<=>8
Sonuç : -1

8<=>5
Sonuç : 1

 

Çalıştırma operatörü AltGr + ; tuş kombinasyonuyla yazılan yatık kesme işareti ` ile gerçekleştirilir. Bu sayede PHP içinde komutları çalıştırma imkanı da bulunur. Örneğin; komut satırında bir sunucunun çalışıp çalışmadığını test etmek için kullandığımız ping komutunu ele alalım.

İnternet erişimi olan herhangi bir bilgisayarda komut satırında;

ping -c 3 www.google.com

komutunu verdiğinizde;

3- Operatörler 9

Google sunucusuna ping komutunu 3 kez göndermiş ve cevabını almış oluyoruz. Aynı şeyi PHP içinde yapmak da mümkün.

<?php
echo `ping -c 5 www.google.com`;
?>

kodunun tarayıcıdaki çıktısı şu şekilde olacaktır:

3- Operatörler 10

Hata denetim operatörü @ simgesi önüne geldiği fonksiyon yazılırken bir hata yapılmışsa ekrana bastırılacak olan hata kodunun yazdırılmamasını sağlar.

Koşullu operatör ya da ternary(üçlü) operatör olarak da bilinen ?: operatörü, herhangi bir sonucun doğruluğunu test eden ve test sonucunda döndürdüğü True ya da False değerine göre iki farklı kod bloğunu çalıştırmayı sağlayan yapıdır. Tüm programlama dillerinde if-else ifadeleriyle bilinen bu koşullu deyim ternary operatörü ile kısa şekilde yazılabilmektedir.

if ( test ) {

test sonucu doğruysa çalıştırılacak kodlar

} else {

test sonucu yanlışsa çalıştırılacak kodlar

}

gösterimi yerine şu şekilde yazılabilir:

(test) ? test sonucu doğruysa çalıştırılacak kodlar : test sonucu yanlışsa çalıştırılacak kodlar;

 

Örnek vermek gerekirse;

Bir sayının pozitif mi ya da negatif mi olduğunu test edelim ve sonuca göre bir mesaj görüntüleyelim.

<?php

$rakam=5;
if ($rakam>0) {
 echo "Sayınız pozitif bir sayıdır";  
} else {
 echo "Sayınız negatif bir sayıdır";
}

?>

kodu yerine kısa gösterimle ve koşullu operatörün yardımıyla anı kodu şöyle yazabiliriz:

<?php
$rakam=5;

$sonuc=($rakam>0)?"Sayınız pozitif bir sayıdır":"Sayınız negatif bir sayıdır";
echo $sonuc;
?>

Tabii burada bir mantık hatası söz konusu, çünkü seçilen rakamın sıfır olması durumu incelenmemiş. Bu durumu ele alabilecek koşullar da ileride işlenecektir.(if – else if – else gibi)

Null Operatörü(??) de tıpkı ternary operatörü gibi bir başka koşullu operatördür. Ancak test kodunun Doğru ya da Yanlış olmasını değil var olup olmamasını test eder. Yani doğruluk koşulu yerine varlık koşulunu test eder. 

Önceki örneğimizi ele alacak olursak; biz ternary operatörüyle $rakam değişkeninin sıfırdan büyük ya da küçük olmasını test etmiştik. Null operatöründe ise $rakam değişkeninin var olup olmadığını test ederiz. Daha önce bunu isset() fonksiyonu ile yapıyorduk. Ternary operatöründe doğru ise farklı kod, yanlış ise farklı kod çalıştırıyorduk. Null operatöründe de eğer var ise değişkenin değerini döndürür, yok ise de yazılan kodu döndürür. Örneğin;

<?php

$rakam=5;

$sonuc=($rakam)??"Sayı verilmemiş";
echo $sonuc;

?>

kodu için çıktı şu şekilde olacaktır:

5

Eğer değişken mevcut değilse çıktı şu şekilde olacaktır:

Sayı verilmemiş

 

İşlem Öncelik Sıralaması şu şekildedir:

3- Operatörler 11