"Note: $this is a special variable that can't be assigned."
While the PHP runtime generates an error if you directly assign $this in code, it doesn't for $$name when name is 'this'.
<?php
$this = 'text'; // error
$name = 'this';
$$name = 'text'; // sets $this to 'text'
?>
Temeller
PHP'de değişkenler dolar işaretini takip eden bir değişken adı ile gösterilir. Değişken adı büyük-küçük harf duyarlıdır.
Değişken isimleri PHP'deki diğer yaftalarla aynı kurallara tabidir. Geçerli bir değişken ismi bir harf veya alt çizgi imi ile başlar, herhangi sayıda harf, sayı veya alt çizgi iminden oluşur. Düzenli ifade olarak, şu şekilde ifade edilebilir: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Bilginize: Burada kastedilen harf a-z veya A-Z arasındaki ASCII harfler ve 127 ile 255 (0x7f-0xff) arasındaki baytlardır.
Bilginize: $this atama yapılamayan özel bir değişkendir.
Ayrıca Kullanıcı Alanı İsimlendirme Kılavuzu belgesine de bakınız.
Değişkenlerle ilgili işlevler hakkında bilgi için, Değişkenlerle ilgili işlevler belgesine bakınız.
<?php
$var = 'Kemal';
$Var = 'gel';
echo "$var, $Var"; // "Kemal, gel" yazdırır
$4site = 'dene bakalım'; // geçersiz; sayı ile başlar
$_4site = 'dene bakalım'; // geçerli; alt çizgi ile başlar
$diğer = 'gerekirse diye'; // geçerli; ISO-8859-9'da 'ğ' harfi 127-255
// arasında, UTF-8'de ise iki baytı 127-255
// arasındadır.
?>
Öntanımlı olarak, değişkenler her zaman değerleriyle atanır. Başka bir deyişle, bir değişkene bir ifade atandığında özgün ifade bütün değeriyle hedef değişkene kopyalanır. Bu demektir ki, örneğin, bir değişkenin değerini başka bir değişkene atadıktan sonra, değişkenlerden birisinin değerini değiştirmenin diğeri üzerinde etkisi olmayacaktır. Bu çeşit atama hakkında daha fazla bilgi için, İfadeler bölümüne bakınız.
PHP değişkenlere değer atamak için başka bir yol daha sunar: Gönderimli atama. Yani, yeni değişken sadece asıl değişkene gönderim yapar (diğer bir deyişle, "onun takma adı olur" veya "onu gösterir") Gönderim yapılan değişkendeki değişiklikler aslını da etkiler, tersi de geçerlidir.
Gönderimli atama için, gönderim yapılacak (daha önce değer atanmış) değişkenin başına ve imi (&) ekleyin. Örneğin, aşağıdaki kod parçası iki kez 'Benim adım Mustafa' yazar:
<?php
$foo = 'Mustafa'; // 'Mustafa' değerini $foo değişkenine ata
$bar = &$foo; // $foo değişkenini $bar değişkenine gönderimli ata
$bar = "Benim adım $bar"; // $bar değişkenini değiştir ...
echo $bar;
echo $foo; // $foo değişkeninin değeri de değişti.
?>
Dikkat edilmesi gereken önemli bir şey de sadece isimli değişkenlerin gönderimle atanabileceğidir.
<?php
$foo = 25;
$bar = &$foo; // Bu geçerli bir atamadır.
$bar = &(24 * 7); // Geçersiz; isimlendirilmemiş bir ifadeye gönderim yapıyor
function test()
{
return 25;
}
$bar = &test(); // Geçersiz.
?>
PHP'de değişkenleri ilklendirmek gerekmez ancak baştan bir değer atamak
oldukça iyi bir alışkanlıktır. İlklendirilmeyen değişkenlerin
kullanıldıkları bağlamda türlerine bağlı olarak öntanımlı değerleri
vardır; öntanımlı değer boolean için FALSE,
integer ve float için sıfır,
string için boş metin (örnekte echo() da
kullanıldı), array için ise boş bir dizidir.
Örnek 1 - İlklendirilmemiş değişkenlerin öntanımlı değerleri
<?php
// Herhangi bir bağlamda tanımlanmamış veya
// gönderim yapılmamış değişken; NULL sonuç verir.
var_dump($tanımsız_değişken);
// Mantıksal değer kullanımı; 'false' çıktısı verir
// (Bu sözdizimi için üç terimli işlecine bakınız)
echo($tanımsız_mantıksallık ? "true\n" : "false\n");
// Dizge kullanımı; çıktısı: 'string(3) "abc"'
$tanımsız_metin .= 'abc';
var_dump($tanımsız_metin);
// Tamsayı kullanımı; 'int(25)' çıktılar.
$tanımsız_tamsayı += 25; // 0 + 25 => 25
var_dump($tanımsız_tamsayı);
// Gerçek sayı kullanımı; 'float(1.25)' çıktılar.
$tanımsız_sayı += 1.25;
var_dump($tanımsız_sayı);
// Dizi kullanımı; çıktısı: array(1) { [3]=> string(3) "def" }
$tanımsız_dizi[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($tanımsız_dizi);
// Nesne kullanımı; yeni stdClass nesnesi oluşturur
// (Öntanımlı sınıflar belgesine bakınız:
// http://www.php.net/manual/tr/reserved.classes.php)
// Çıktısı: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
$tanımsız_nesne->foo = 'bar';
var_dump($tanımsız_nesne);
?>
İlklendirilmemiş bir değişkenin öntanımlı değerine güvenmek, içinde aynı değişken isminin kullanıldığı bir dosyayı betiğe dahil ettiğinizde sorun çıkarır. Bunun aynı zamanda büyük bir güvenlik riski omuşturmaması için register_globals yönergesine 'on' değeri atanmalıdır. İlklendirilmemiş değişken kullanımı E_NOTICE seviyesinde hata oluşturur, ancak ilklendirilmemiş bir diziye eleman eklenmesi halinde hata oluşmaz. isset() dil oluşumu bir değişkenin ilklendirilip ilklendirilmediğini öğrenmek için kullanılabilir.
If you need to check user entered value for a proper PHP variable naming convention you need to add ^ to the above regular expression so that the regular expression should be '^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.
Example
<?php
$name="20011aa";
if(!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/',$name))
echo $name.' is not a valid PHP variable name';
else
echo $name.' is valid PHP variable name';
?>
Outputs: 2011aa is valid PHP variable name
but
<?php
$name="20011aa";
if(!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/',$name))
echo $name.' is not a valid PHP variable name';
else
echo $name.' is valid PHP variable name';
?>
Outputs: 2011aa is not a valid PHP variable name
This page should include a note on variable lifecycle:
Before a variable is used, it has no existence. It is unset. It is possible to check if a variable doesn't exist by using isset(). This returns true provided the variable exists and isn't set to null. With the exception of null, the value a variable holds plays no part in determining whether a variable is set.
Setting an existing variable to null is a way of unsetting a variable. Another way is variables may be destroyed by using the unset() construct.
<?php
print isset($a); // $a is not set. Prints false. (Or more accurately prints ''.)
$b = 0; // isset($b) returns true (or more accurately '1')
$c = array(); // isset($c) returns true
$b = null; // Now isset($b) returns false;
unset($c); // Now isset($c) returns false;
?>
is_null() is an equivalent test to checking that isset() is false.
The first time that a variable is used in a scope, it's automatically created. After this isset is true. At the point at which it is created it also receives a type according to the context.
<?php
$a_bool = true; // a boolean
$a_str = 'foo'; // a string
?>
If it is used without having been given a value then it is uninitalized and it receives the default value for the type. The default values are the _empty_ values. E.g Booleans default to FALSE, integers and floats default to zero, strings to the empty string '', arrays to the empty array.
A variable can be tested for emptiness using empty();
<?php
$a = 0; //This isset, but is empty
?>
Unset variables are also empty.
<?php
empty($vessel); // returns true. Also $vessel is unset.
?>
Everything above applies to array elements too.
<?php
$item = array();
//Now isset($item) returns true. But isset($item['unicorn']) is false.
//empty($item) is true, and so is empty($item['unicorn']
$item['unicorn'] = '';
//Now isset($item['unicorn']) is true. And empty($item) is false.
//But empty($item['unicorn']) is still true;
$item['unicorn'] = 'Pink unicorn';
//isset($item['unicorn']) is still true. And empty($item) is still false.
//But now empty($item['unicorn']) is false;
?>
For arrays, this is important because accessing a non-existent array item can trigger errors; you may want to test arrays and array items for existence with isset before using them.
When wanting to switch two variables from content, you can use the XOR operator:
<?PHP
$a=5;
$b=3;
//Please mind the order of these, as it's important for the outcome.
$a^=$b;
$b^=$a;
$a^=$b;
echo $a.PHP_EOL.$b;
/* prints:
3
5
*/
?>
This will also work on strings, but it won't work on arrays and objects, so for them you'll have to use the serialize() function before the operation, and the unserialize() function after.
