$ PHP’de değişkenlere atama yapmanın yoludur. PHP’deki değişkenler dinamik olarak yazılır, yani türleri kendilerine atanan şey tarafından belirlenir.
$a = “Bu bir string”;
$b = 1; // Bu bir int
$bldgA = new Building(‘red’); // bldgA bir değişkendir ve Building sınıfının bir nesnesidir (diğer adıyla bir nesne).
$bldgA->describe(); // Bu, Building sınıfının bir üye işlevi olan describe() işlevini çağırır ($bldgA’nın Building sınıfının bir nesnesi olarak bildirildiğini hatırlayın)
$bldgA->number_of_floors; // number_of_floors, Building sınıfının bir veri üyesidir. Bunu bir sınıfın içindeki bir değişken olarak düşünebilirsiniz, ancak sınıfın sabit bir adı olan bir parçası olduğu için $ ile atıfta bulunmazsınız.
- $variable = ‘value’; // Genel değişken atama
- $object->property = ‘value’; // Bir nesne özelliği atayın
- ClassName::$property = ‘value’; // Statik bir sınıf özelliği atayın
- $array[0] = ‘value’; // Dizinin bir indeksine değer atayın
- $array[] = ‘value’; // Dizinin sonuna bir öğe ekleyin
- $array[‘key’] = ‘value’; // Bir dizi değeri atayın
- echo $değişken; // Bir değişken değerini yazdırın
- some_function($variable); // Değişkeni fonksiyon parametresi olarak kullan
- unset($variable); // Bir değişkenin kaydını sil
- $$variable = ‘value’; // Bir değişkene değişken atayın
- isset($variable); // Bir değişkenin atanmış olup olmadığını kontrol edin
- empty($variable); // Bir değişkenin boş olup olmadığını kontrol edin
Tür kontrolü
Değişkenler ve türlerle ilgili bazı belgelerde PHP’nin statik tipleme kullanmadığından bahsedilmektedir. Bu doğrudur, ancak PHP, işlev/yöntem parametreleri ve dönüş değerleri söz konusu olduğunda bazı tür denetimleri yapar (özellikle PHP 7 ile).
PHP 7’de tür imi kullanarak parametre ve dönüş değeri tür denetimini aşağıdaki gibi uygulayabilirsiniz:
<?php /** * Sayılarla hokkabazlık yapın ve hokkabazlık başarılıysa true döndürün. */ function numberJuggling(int $a, int $b) : bool { $sum = $a + $b; return $sum % 2 === 0; }
Not: PHP’nin tamsayılar ve booleanlar için gettype() işlevi sırasıyla integer ve boolean’dır. Ancak bu tür değişkenler için tür bilgisi için int ve bool kullanmanız gerekir. Aksi takdirde PHP size bir sözdizimi hatası vermez, ancak integer ve boolean sınıflarının geçilmesini bekler.
Yukarıdaki örnek, $a veya $b parametresi olarak sayısal olmayan bir değer verilmesi ve fonksiyonun true veya false dışında bir değer döndürmesi durumunda hata verir. Yukarıdaki örnek “gevşektir”, yani $a veya $b’ye float değeri verebilirsiniz. Eğer katı tipleri uygulamak istiyorsanız, yani sadece tamsayı girebilir ve float giremezseniz, PHP dosyanızın en başına aşağıdakileri ekleyin:
<?php declare('strict_types=1');
PHP 7’den önce işlevler ve yöntemler aşağıdaki türler için tür ipucuna izin veriyordu:
- callable (çağrılabilir bir işlev veya yöntem)
- dizi (başka dizileri de içerebilen herhangi bir dizi türü)
- Arayüzler (Fully-Qualified-Class-Name veya FQDN)
- Sınıflar (FQDN)
Değişkenleri bastırma: echo ve print
echo ve print işlev değil, dil yapılarıdır. Bu, bir işlevin yaptığı gibi argümanın etrafında parantez gerektirmedikleri anlamına gelir (hemen hemen her PHP ifadesinin etrafına her zaman parantez eklenebilir ve bu nedenle echo(“test”) de herhangi bir zarar vermez). Bir değişkenin, sabitin veya ifadenin dize gösterimini çıktılarlar. Dizileri veya nesneleri yazdırmak için kullanılamazlar.
- Joel dizesini $name değişkenine atayın
$name = "Joel";
- echo & print kullanarak $name değerinin çıktısını alın
echo $name; #> Joel print $name; #> Joel
- Parantezler gerekli değildir, ancak kullanılabilir
echo($name); #> Joel print($name); #> Joel
- Birden fazla parametre kullanma (sadece echo)
echo $name, "Smith"; #> JoelSmith echo($name, " ", "Smith"); #> Joel Smith
print
, echo’dan farklı olarak bir ifadedir (1 döndürür) ve bu nedenle daha fazla yerde kullanılabilir:
print("hey") && print(" ") && print("you"); #> you11
- Yukarıdakiler şuna eşdeğerdir:
print ("hey" && (print (" " && print "you"))); #> you11
Echo için kısa gösterim
PHP etiketlerinin dışındayken, echo için öntanımlı olarak, çıktıyı başlatmak için kullanan bir kısaltma gösterimi mevcuttur. Örneğin:
<p><?=$variable?></p> <p><?= "This is also PHP" ?></p>
Sonlandırıcı ; olmadığına dikkat edin. Bunun nedeni, kapanış PHP etiketinin tek bir deyim için sonlandırıcı görevi görmesidir. Dolayısıyla, bu kısaltılmış gösterimde noktalı virgülün atlanması gelenekseldir.
print önceliği
print dil yapısı olmasına rağmen operatör gibi önceliğe sahiptir. .= += -= *= **= /= .= %= &= ve and operatörleri arasında yer alır ve sol ilişkilendirmeye sahiptir. Örnek:
echo '1' . print '2' + 3; //çıktı 511
Parantezlerle aynı örnek:
echo '1' . print ('2' + 3); //çıktı 511
echo ve print arasındaki farklar
Kısacası, iki temel farklılık vardır:
- print yalnızca bir parametre alırken, echo birden fazla parametre alabilir.
- print bir değer döndürür, bu nedenle bir ifade olarak kullanılabilir.
Dizileri ve nesneleri ekrana bastırma
print_r()
– Hata ayıklama için Dizilerin ve Nesnelerin Çıktısını Alma
print_r bir dizinin veya nesnenin insan tarafından okunabilir bir biçiminin çıktısını verir.
Bir dizi veya nesne olan bir değişkeniniz olabilir. Bir echo ile çıktı almaya çalışmak hata verecektir:
Uyarı: Diziden dizeye dönüştürme.
Bunun yerine, bu değişkenin insan tarafından okunabilir bir biçimini dökmek için print_r işlevini kullanabilirsiniz.
İçeriği bir dize olarak döndürmek için ikinci parametre olarak true değerini geçebilirsiniz.
$myobject = new stdClass();
$myobject->myvalue = 'Hello World';
$myarray = [ "Hello", "World" ];
$mystring = "Hello World";
$myint = 42;
// print_r kullanarak dizinin tuttuğu verileri görüntüleyebiliriz.
print_r($myobject);
print_r($myarray);
print_r($mystring);
print_r($myint);
Bu, aşağıdaki çıktıları verir:
stdClass Object ( [myvalue] => Hello World ) Array ( [0] => Hello [1] => World ) Hello World 42
Ayrıca, print_r çıktısı basitçe echo edilmek yerine bir string olarak yakalanabilir. Örneğin, aşağıdaki kod $myarray’in biçimlendirilmiş halini yeni bir değişkene dökecektir:
$formatted_array = print_r($myarray, true);
PHP’nin çıktısını bir tarayıcıda görüntülüyorsanız ve HTML olarak yorumlanıyorsa, satır sonlarının gösterilmeyeceğini ve aşağıdaki gibi bir şey yapmadığınız sürece çıktının çok daha az okunaklı olacağını unutmayın
echo '<pre>' . print_r($myarray, true) . '</pre>';
Bir sayfanın kaynak kodunu açmak da değişkeninizi <pre> etiketi kullanmadan aynı şekilde biçimlendirecektir.
Alternatif olarak tarayıcıya çıktısını aldığınız şeyin HTML değil düz metin olduğunu söyleyebilirsiniz:
header('Content-Type: text/plain; charset=utf-8'); print_r($myarray);
var_dump()
– Türü ve değeri de dahil olmak üzere değişken(ler)in çıktısı
Çıktı, print_r ile karşılaştırıldığında daha ayrıntılıdır çünkü değeriyle birlikte değişkenin türünü ve nesne kimlikleri, dizi boyutları, dize uzunlukları, referans işaretleyicileri vb. gibi diğer bilgileri de çıktı olarak verir.
Hata ayıklama amacıyla daha ayrıntılı bir sürüm çıktısı almak için var_dump kullanabilirsiniz.
var_dump($myobject, $myarray, $mystring, $myint);
Çıktı daha ayrıntılıdır:
object(stdClass)#12 (1) { ["myvalue"]=> string(11) "Hello World" } array(2) { [0]=> string(5) "Hello" [1]=> string(5) "World" } string(11) "Hello World" int(42)
var_export()
– Geçerli PHP Kodu Çıktısı
var_export() öğenin PHP ile çözümlenebilir bir gösterimini döker.
İçeriği bir değişkene döndürmek için ikinci parametre olarak true değerini geçebilirsiniz.
var_export($myarray); var_export($mystring); var_export($myint);
Çıktı geçerli PHP kodudur:
array ( 0 => 'Hello', 1 => 'World', ) 'Hello World' 42
İçeriği bir değişkene koymak için şunu yapabilirsiniz:
$array_export = var_export($myarray, true); $string_export = var_export($mystring, true); $int_export = var_export($myint, 1); // herhangi bir `Doğru` değeri
Bundan sonra, bu şekilde çıktı alabilirsiniz:
printf('$myarray = %s; %s', $array_export, PHP_EOL); printf('$mystring = %s; %s', $string_export, PHP_EOL); printf('$myint = %s; %s', $int_export, PHP_EOL);
Bu, aşağıdaki çıktıyı üretecektir:
$myarray = array ( 0 => 'Hello', 1 => 'World', ); $mystring = 'Hello World'; $myint = 42;
Bir Değişkene Dinamik Olarak Erişme – İsim Değişken Değişkenleri
Değişkenlere dinamik değişken adları aracılığıyla erişilebilir. Bir değişkenin adı başka bir değişkende saklanabilir ve böylece değişkene dinamik olarak erişilebilir. Bu tür değişkenler, değişken değişkenleri olarak bilinir.
Bir değişkeni değişken değişkene dönüştürmek için, değişkeninizin önüne fazladan bir $ işareti koyarsınız.
$variableName = 'foo'; $foo = 'bar'; // Aşağıdakilerin hepsi eşdeğerdir ve hepsi "bar" çıktısı verir: echo $foo; echo ${$variableName}; echo $$variableName; //aynı şekilde, $variableName = 'foo'; $$variableName = 'bar'; // Aşağıdaki ifadeler de 'bar' çıktısı verecektir echo $foo; echo $$variableName; echo ${$variableName};
Değişken değişkenler, fonksiyon/metot çağrılarını eşlemek için kullanışlıdır:
function add($a, $b) { return $a + $b; } $funcName = 'add'; echo $funcName(1, 2); // outputs 3
Bu özellikle PHP sınıflarında çok daha yardımcı olur:
class myClass { public function __construct() { $functionName = 'doSomething'; $this->$functionName('Hello World'); } private function doSomething($string) { echo $string; // Çıktı "Hello World" } }
{} arasına $variableName koymak mümkündür, ancak gerekli değildir:
${$variableName} = $value;
Aşağıdaki örneklerin her ikisi de eşdeğerdir ve “baz” çıktısı verir:
$fooBar = 'baz'; $varPrefix = 'foo'; echo $fooBar; // Çıktı "baz" echo ${$varPrefix . 'Bar'}; // Çıktı "baz"
{} kullanılması yalnızca değişkenin adı aşağıdaki gibi bir ifade olduğunda zorunludur:
${$variableNamePart1 . $variableNamePart2} = $value;
Bununla birlikte, daha okunabilir olduğu için her zaman {} kullanılması önerilir.
Yapılması tavsiye edilmese de, bu davranışı zincirlemek de mümkündür:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Değişken değişkenlerin aşırı kullanımının birçok geliştirici tarafından kötü bir uygulama olarak görüldüğünü belirtmek önemlidir. Modern IDE’ler tarafından statik analiz için uygun olmadıklarından, çok sayıda değişken değişkene (veya dinamik yöntem çağrılarına) sahip büyük kod tabanlarının bakımı hızla zorlaşabilir.
PHP5 ve PHP7 arasındaki farklar
Her zaman {} veya () kullanmanın bir başka nedeni de, PHP5 ve PHP7’nin dinamik değişkenleri ele alma yöntemlerinin biraz farklı olması ve bazı durumlarda farklı sonuçlara yol açmasıdır.
PHP7’de, dinamik değişkenler, özellikler ve yöntemler PHP5’teki özel durumların karışımının aksine artık soldan sağa sırayla değerlendirilecektir. Aşağıdaki örnekler değerlendirme sırasının nasıl değiştiğini göstermektedir.
Durum 1 : $$foo['bar']['baz']
- PHP5 yorumlaması :
${$foo['bar']['baz']}
- PHP7 yorumlaması :
($$foo)['bar']['baz']
Durum 2 : $foo->$bar['baz']
- PHP5 yorumlaması :
$foo->{$bar['baz']}
- PHP7 yorumlaması :
($foo->$bar)['baz']
Durum 3 : $foo->$bar['baz']()
- PHP5 yorumlaması :
$foo->{$bar['baz']}()
- PHP7 yorumlaması :
($foo->$bar)['baz']()
Durum 4 : Foo::$bar['baz']()
- PHP5 yorumlaması :
Foo::{$bar['baz']}()
- PHP7 yorumlaması :
(Foo::$bar)['baz']()
Veri Türleri
Farklı amaçlar için farklı veri türleri vardır. PHP’de açık tür tanımları yoktur, ancak bir değişkenin türü atanan değerin türüne veya atandığı türe göre belirlenir.
PHP’de şu veri türleri vardır: null, boolean, integer, float, string, object, resource ve array.
Null
Null herhangi bir değişkene atanabilir. Değeri olmayan bir değişkeni temsil eder.
$foo = null;
Bu, değişkeni geçersiz kılar ve çağrıldığında değeri tanımsız veya geçersiz olur. Değişken bellekten temizlenir ve çöp toplayıcı tarafından silinir.
Boolean
Bu, yalnızca iki olası değeri olan en basit türdür.
$foo = true; $bar = false;
Boolean’lar kod akışını kontrol etmek için kullanılabilir.
$foo = true; if ($foo) { echo "true"; } else { echo "false"; }
Integer
Tamsayı, pozitif veya negatif bir tam sayıdır. Herhangi bir sayı tabanı ile kullanılabilir. Bir tamsayının boyutu platforma bağlıdır. PHP işaretsiz tamsayıları desteklemez.
$foo = -3; // negatif $foo = 0; // sıfır (null veya false (boolean olarak) da olabilir) $foo = 123; // pozitif ondalık $bar = 0123; // octal = 83 ondalık $bar = 0xAB; // hexadecimal = 171 ondalık $bar = 0b1010; // binary = 10 ondalık var_dump(0123, 0xAB, 0b1010); // çıktı: int(83) int(171) int(10)
Float
Kayan noktalı sayılar, “çiftler” veya kısaca “float” olarak adlandırılan sayılar ondalık sayılardır.
$foo = 1.23; $foo = 10.0; $bar = -INF; $bar = NAN;
Array
Dizi, bir değerler listesi gibidir. Bir dizinin en basit biçimi tamsayı ile indekslenir ve ilk eleman 0 indisinde olacak şekilde indekse göre sıralanır.
$foo = array(1, 2, 3); // Bir tamsayı dizisi $bar = ["A", true, 123 => 5]; // Kısa dizi sözdizimi, PHP 5.4+ echo $bar[0]; // "A" echo $bar[1]; // true echo $bar[123]; // 5 echo $bar[1234]; // null
Diziler, bir değere tamsayı indeksinden başka bir anahtar da ilişkilendirebilir. PHP’de, tüm diziler perde arkasında ilişkisel dizilerdir, ancak bir ‘ilişkisel dizi’den farklı olarak bahsettiğimizde, genellikle tamsayı olmayan bir veya daha fazla anahtar içeren bir diziyi kastederiz.
$array = array(); $array["foo"] = "bar"; $array["baz"] = "quux"; $array[42] = "hello"; echo $array["foo"]; // Çıktı "bar" echo $array["bar"]; // Çıktı "quux" echo $array[42]; // Çıktı "hello"
String
Bir dize, karakterlerden oluşan bir dizi gibidir.
$foo = "bar";
Bir dizi gibi, bir dize de tek tek karakterlerini döndürmek için indekslenebilir:
$foo = "bar"; echo $foo[0]; // b', $foo içindeki dizenin ilk karakterini yazdırır.
Object
Nesne, bir sınıfın örneğidir. Değişkenlerine ve yöntemlerine -> operatörü ile erişilebilir.
$foo = new stdClass(); // önceden tanımlanmış olan stdClass sınıfından yeni bir nesne oluşturur, $foo->bar = "baz"; echo $foo->bar; // çıktı "baz" // Ya da bir diziyi bir nesneye dönüştürebiliriz: $quux = (object) ["foo" => "bar"]; echo $quux->foo; // Bu, "bar" çıktısını verir.
Resource
Kaynak değişkenleri, açılan dosyalara, veritabanı bağlantılarına, akışlara, görüntü tuval alanlarına ve benzerlerine (kılavuzda belirtildiği gibi) özel tutamaçlar tutar.
$fp = fopen('file.ext', 'r'); // fopen(), disk üzerindeki bir dosyayı kaynak olarak açma işlevidir. var_dump($fp); // çıktı: (stream) türünde kaynak(2)
—
Bir değişkenin türünü dize olarak almak için gettype() fonksiyonunu kullanın:
echo gettype(1); // çıktı "integer" echo gettype(true); // "boolean"
Global değişkenler
Aşağıdaki koda bakalım:
function foo() { global $bob; $bob->doSomething(); }
Buradaki ilk sorunuz çok açık
$bob nereden geldi?
Kafanız mı karıştı? Güzel. Globallerin neden kafa karıştırıcı olduğunu ve kötü bir uygulama olarak kabul edildiğini öğrendiniz.
Bu gerçek bir program olsaydı, bir sonraki eğlenceniz $bob’un tüm örneklerini takip etmek ve doğru olanı bulmayı ummak olurdu ($bob her yerde kullanılıyorsa bu daha da kötüleşir). Daha da kötüsü, eğer başka biri $bob’u tanımlarsa (ya da siz bu değişkeni unutup tekrar kullanırsanız) kodunuz bozulabilir (yukarıdaki kod örneğinde, yanlış nesneye sahip olmak ya da hiç nesneye sahip olmamak ölümcül bir hataya neden olur).
Neredeyse tüm PHP programları include(‘file.php’) gibi kodlar kullandığından, ne kadar çok dosya eklerseniz bu gibi kodları korumak işiniz o kadar zorlaşır.
Ayrıca bu, uygulamalarınızı test etme görevini çok zorlaştırır. Veritabanı bağlantınızı tutmak için global bir değişken kullandığınızı varsayalım:
$dbConnector = new DBConnector(...);function doSomething() {global $dbConnector;$dbConnector->execute("...");}
Bu işlevi birim testine tabi tutmak için global $dbConnector değişkenini geçersiz kılmanız, testleri çalıştırmanız ve ardından orijinal değerine sıfırlamanız gerekir ki bu da hataya çok meyillidir:
/*** @test*/function testSomething() {global $dbConnector;$bkp = $dbConnector; // Make backup$dbConnector = Mock::create('DBConnector'); // OverrideassertTrue(foo());$dbConnector = $bkp; // Restore}
Globallerden nasıl kaçınırız?
Globallerden kaçınmanın en iyi yolu Dependency Injection adı verilen bir felsefedir. Bu, ihtiyaç duyduğumuz araçları fonksiyona veya sınıfa aktardığımız yerdir.
function foo(\Bar $bob) { $bob->doSomething(); }
Bunu anlamak ve sürdürmek çok daha kolaydır. Bob’un nerede kurulduğunu tahmin etmek gerekmez çünkü bunu bilmek çağıranın sorumluluğundadır (bilmemiz gerekenleri bize aktarır). Daha da iyisi, aktarılanları kısıtlamak için tip bildirimlerini kullanabiliriz.
Böylece $bob’un Bar sınıfının bir örneği ya da Bar’ın bir çocuğunun örneği olduğunu biliyoruz, yani bu sınıfın yöntemlerini kullanabileceğimizi biliyoruz. Standart bir autoloader (PHP 5.3’ten beri mevcut) ile birlikte, artık Bar’ın nerede tanımlandığını bulabiliriz. PHP 7.0 veya sonrası, skaler türleri (int veya string gibi) de kullanabileceğiniz genişletilmiş tür bildirimlerini içerir.
Süper global değişkenler
PHP’deki süper globaller, her zaman kullanılabilir olan ve betik boyunca herhangi bir kapsamdan erişilebilen önceden tanımlanmış değişkenlerdir.
Fonksiyonlar/yöntemler, sınıflar veya dosyalar içinde bunlara erişmek için global $variable yapmaya gerek yoktur.
Bu PHP superglobal değişkenleri aşağıda listelenmiştir:
Tanımlanmamış değişkenlerin varsayılan değerleri
PHP’de gerekli olmamakla birlikte, değişkenleri önce tanımlamak çok iyi bir uygulamadır. Tanımlanmamış değişkenler, kullanıldıkları bağlama bağlı olarak türlerinin varsayılan bir değerine sahiptir:
Unset ve unreferenced
var_dump($unset_var); // çıktı NULL
Boolean
echo($unset_bool ? "true\n" : "false\n"); // çıktı 'false'
String
$unset_str .= 'abc'; var_dump($unset_str); // çıktı 'string(3) "abc"'
Integer
$unset_int += 25; // 0 + 25 => 25 var_dump($unset_int); // çıktı 'int(25)'
Float/double
$unset_float += 1.25; var_dump($unset_float); // çıktı 'float(1.25)'
Array
$unset_arr[3] = "def"; var_dump($unset_arr); // çıktı array(1) { [3]=> string(3) "def" }
Object
$unset_obj->foo = 'bar'; var_dump($unset_obj); // çıktı: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
Tanımlanmamış bir değişkenin varsayılan değerine güvenmek, bir dosyanın aynı değişken adını kullanan başka bir dosyaya dahil edilmesi durumunda sorunludur.
Değişkenin “Değer Doğruluğu” ve Özdeşlik Operatörü
PHP’de, değişken değerlerinin ilişkili bir “doğruluğu” vardır, bu nedenle boolean olmayan değerler bile doğru veya yanlışa eşit olacaktır. Bu, herhangi bir değişkenin koşullu bir blokta kullanılmasına izin verir, örn.
if ($var == true) { /* açık versiyon */ } if ($var) { /* $var == true'nun kapalı hali */ }
Farklı değişken değer türleri için bazı temel kurallara bakalım:
- Sıfır olmayan uzunluğa sahip dizeler, ‘ ‘ gibi yalnızca beyaz boşluk içeren dizeler de dahil olmak üzere true değerine eşittir.
- Boş ” dizeleri false değerine eşittir.
$var = ''; $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true $var = ' '; $var_is_true = ($var == true); // true $var_is_false = ($var == false); // false
- Tamsayılar sıfırdan farklıysa true değerine eşitken, sıfır false değerine eşittir.
$var = -1; $var_is_true = ($var == true); // true $var = 99; $var_is_true = ($var == true); // true $var = 0; $var_is_true = ($var == true); // false
null yanlışa eşittir
$var = null; $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true
- Boş dizeler ” ve sıfır dizesi ‘0’ yanlışa eşittir.
$var = ''; $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true $var = '0'; $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true
- Floating point değerleri sıfırdan farklıysa true değerine eşitken, sıfır değerleri false değerine eşittir.
- NAN: (PHP’nin Not-a-Number) değeri
true
değerine eşittir, yaniNAN == true
değeritrue
değeridir. Bunun nedeniNAN
değerinin sıfır olmayan bir floating-point değeri olmasıdır. - Sıfır değerleri IEEE 754 tarafından tanımlandığı gibi hem +0 hem de -0 değerlerini içerir. PHP, çift hassasiyetli floating-point için +0 ve -0 arasında ayrım yapmaz, yani
floatval('0') == floatval('-0')
true
dur. Aslında,floatval('0') === floatval('-0')
. - Ayrıca, hem
floatval('0') == false
hem defloatval('-0') == false
.
- NAN: (PHP’nin Not-a-Number) değeri
$var = NAN; $var_is_true = ($var == true); // true $var_is_false = ($var == false); // false $var = floatval('-0'); $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true $var = floatval('0') == floatval('-0'); $var_is_true = ($var == true); // false $var_is_false = ($var == false); // true
Özdeşlik Operatörü
PHP Belgelerinde Karşılaştırma İşleçleri için bir Özdeşlik İşleci vardır ===. Bu işleç bir değişkenin bir başvuru değeriyle aynı olup olmadığını denetlemek için kullanılabilir:
$var = null; $var_is_null = $var === null; // true $var_is_true = $var === true; // false $var_is_false = $var === false; // false
Buna karşılık gelen bir “özdeş olmayan” !== işleci vardır:
$var = null; $var_is_null = $var !== null; // false $var_is_true = $var !== true; // true $var_is_false = $var !== false; // true
Özdeşlik operatör, is_null() gibi dil fonksiyonlarına alternatif olarak kullanılabilir.
strpos()
strpos($haystack, $needle) dil fonksiyonu, $needle’ın $haystack içinde hangi indekste yer aldığını veya hiç yer alıp almadığını bulmak için kullanılır. strpos() fonksiyonu büyük/küçük harfe duyarlıdır; eğer ihtiyacınız olan büyük/küçük harfe duyarsız bulma ise stripos($haystack, $needle) ile devam edebilirsiniz
strpos & stripos fonksiyonu ayrıca üçüncü parametre offset (int) içerir; bu parametre belirtilirse, arama dizenin başından itibaren sayılan bu karakter sayısı kadar başlar. Strrpos ve strripos’tan farklı olarak, ofset negatif olamaz.
İşlev aşağıdakileri geri döndürebilir:
- 0 eğer $needle $haystack’in başında bulunursa;
- eğer $needle $haystack içinde başlangıçtan başka bir yerde bulunuyorsa indeksi belirten sıfırdan farklı bir tamsayı;
- ve $needle $haystack içinde hiçbir yerde bulunmazsa false değerini alır.
Hem 0 hem de false PHP’de false doğruluğuna sahip olduğundan, ancak strpos() için farklı durumları temsil ettiğinden, bunları birbirinden ayırmak ve sadece false’a eşit olan bir değeri değil, tam olarak false’u aramak için === özdeş işlecini kullanmak önemlidir.
$idx = substr($haystack, $needle); if ($idx === false) { // $needle $haystack içinde bulunamadığında kullanılacak mantık } else { // $haystack içinde $needle bulunduğunda uygulanacak mantık }
Alternatif olarak, aynı değil operatörünü kullanın:
$idx = substr($haystack, $needle); if ($idx !== false) { // $haystack içinde $needle bulunduğunda uygulanacak mantık } else { // $needle $haystack içinde bulunamadığında kullanılacak mantık }
Tanımlanmış tüm değişkenleri görme
get_defined_vars() işlevi, işlevin çağrıldığı kapsamda tanımlanan değişkenlerin tüm adlarını ve değerlerini içeren bir dizi döndürür. Veriyi yazdırmak istiyorsanız, print_r veya var_dump gibi verilerin çıktısını almak için standart fonksiyonları kullanabilirsiniz.
var_dump(get_defined_vars());
Not: Bu fonksiyon genellikle sadece 4 süper global döndürür: $_GET,$_POST,$_COOKIE,$_FILES. Diğer süper globaller yalnızca kodda bir yerde kullanılmışlarsa döndürülürler. Bunun nedeni öntanımlı olarak etkin olan auto_globals_jit yönergesidir. Etkinleştirildiğinde, $_SERVER ve $_ENV değişkenleri kod başladığında değil, ilk kullanıldıklarında (Just In Time) oluşturulur. Bu değişkenler bir betik içinde kullanılmıyorsa, bu yönergenin açık olması bir performans kazancı sağlayacaktır.