PHP değişken bildiriminde tür tanımlamayı gerektirmez (veya desteklemez); bir değişkenin türü kullanıldığı bağlama göre saptanır. Yani, string türünde bir değer $var değişkenine atanırsa $var, string türünde bir değişken haline gelir. $var değişkenine bir integer değer atanırsa $var, integer türünde bir değişken haline gelir.
Çarpma işleci '*', PHP'nin özdevinimli tür dönüşümüne iyi bir örnektir. Terimlerden biri float türündeyse her iki terim float olarak ele alınır ve sonuç float türünde olur. Aksi takdirde, terimler integer olarak yorumlanır ve sonuç integer türünde olur. Yalnız dikkat edin, bu işlem ne terimlerin kendi türlerini ne de ifadenin kendi türünü değiştirir.
<?php
$foo = "1"; // $foo string türündedir (ASCII 49)
$foo += 2; // $foo integer türündedir (2)
$foo = $foo * 1.3; // $foo float türündedir (2.6)
$foo = 5 * "10 Little Piggies"; // $foo integer türündedir (50)
$foo = 5 * "10 Small Pigs"; // $foo integer türündedir (50)
?>
Eğer yukarıdaki son iki örnek size tuhaf geldiyse Dizgelerin sayıya dönüşümü konusuna bakınız.
Bir değişkeni belli bir türe dönüşmeye zorlamak istiyorsanız Tür Çarpıtma konusuna bakınız. Bir değişkenin türünü değiştirmek istiyorsanız settype() işlevine bakınız.
Bu bölümdeki örnekleri sınamak için var_dump() işlevini kullanınız.
Bilginize:
array türüne özdevinimli dönüşüm şimdilik tanımsızdır.
Ayrıca, PHP dizgelerde konumlar üzerinden indislemeyi dizi indislemede kullanılan sözdizimiyle desteklediğinden aşağıdaki örnek tüm PHP sürümleri için geçerli bir örnektir:
<?php
$a = 'car'; // $a string türündedir
$a[0] = 'b'; // $a hala string türündedir
echo $a; // -> bar
?>Daha fazla bilgi edinmek için Karakterinden dizgeye erişim konusuna bakınız.
PHP'de tür çarpıtma (type casting) C'deki gibi çalışır: İstenen türün ismi parantez içinde türü çarpıtılacak değişkenin önüne yazılır.
<?php
$foo = 10; // $foo integer türündedir
$bar = (boolean) $foo; // $bar boolean türündedir
?>
İzin verilen çarpıtmalar:
(binary) çarpıtması ve b önekinin ileriye dönük desteği PHP 5.2.1'de eklenmiştir. (binary) çarpıtmasının (string) ile aynı olması gerektiğini, ancak buna güvenilmemesi gerektiğini unutmayın,
(unset) çarpıtması PHP 7.2.0 ve sonrasında önerilmemektedir. (unset) çarpıtmasının değişken veya çağrıya NULL değer atanmasıyla aynı olduğunu unutmayın. (unset) çarpıtması PHP 8.0.0 sürümünde kaldırılacaktır.
Parantezler içinde sekmelere ve boşluklara izin verildiğinden aşağıdaki iki deyim eşdeğerdir:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Normal dizgelerin ikil dizgelere dönüştürülmesi:
<?php
$binary = (binary) $string;
$binary = b"ikil dizge";
?>
Bilginize:
Bir değişkenin türünü string türüne çarpıtmak yerine değişkeni çift tırnak içine almak aynı sonucu sağlar:
<?php
$foo = 10; // $foo integer türündedir
$str = "$foo"; // $str string türündedir
$fst = (string) $foo; // $fst de string türündedir
// "bunlar aynı" basar
if ($fst === $str) {
echo "bunlar aynı";
}
?>
Belli türler arasında çarpıtma yapılırken tam olarak ne olup bittiği açıkça belli olmayabilir. Daha fazla bilgi için şu bölümlere bakınız: