Aynı değer aynı anda birden çok değişkene atansın mı?


115

PHP'de birden çok değişken için aynı değeri aynı anda nasıl atayabilirim?

Bende şöyle bir şey var:

$var_a = 'A';
$var_b = 'A';
$same_var = 'A';
$var_d = 'A';
$some_var ='A';

Benim durumumda, tüm değişkenleri aynı ada sahip olacak şekilde yeniden adlandıramıyorum (bu işleri daha kolay hale getirir), bu nedenle aynı değeri tüm değişkenlere çok daha kompakt bir şekilde atamanın bir yolu var mı?

Yanıtlar:


248
$var_a = $var_b = $same_var = $var_d = $some_var = 'A';

Harika, benim için mükemmel çalıştı $ level1 = $ level2 = $ level3 = $ level4 = false;
2013

1
Herhangi bir sınır var mı?
dipi evil

9
Bu Php sınıfında kullanılamaz ve bu ham tiptir.
Chaminda Bandara

@ChamindaBandara PHP sınıfında kullanılamayacak ne demek?
Eoin

4
@Eoin: Yaparken $var_a = $var_b = ... = new Class();, tüm değişkenler aynı örneğini referans alacaktır Class.
Tim Cooper

1

Diğer yanıta eklemek için.

$a = $b = $c = $d aslında anlamı $a = ( $b = ( $c = $d ) )

PHP varsayılan olarakint, string, etc. değere göre ilkel türleri ve varsayılan olarak nesneleri referans olarak aktarır.

Bunun anlamı

$c = 1234;
$a = $b = $c;
$c = 5678;
//$a and $b = 1234; $c = 5678;

$c = new Object();
$c->property = 1234;
$a = $b = $c;
$c->property = 5678;
// $a,b,c->property = 5678 because they are all referenced to same variable

Bununla birlikte, anahtar kelime kullanarak nesneleri de değere göre iletebilirsiniz clone, ancak parantez kullanmanız gerekecektir.

$c = new Object();
$c->property = 1234;
$a = clone ($b = clone $c);
$c->property = 5678;
// $a,b->property = 1234; c->property = 5678 because they are cloned

ANCAK, bu yöntemi kullanarak ilkel türleri anahtar kelimeye referansla & GEÇEMEZSİNİZ

$c = 1234;

$a = $b = &$c; // no syntax error
// $a is passed by value. $b is passed by reference of $c

$a = &$b = &$c; // syntax error

$a = &($b = &$c); // $b = &$c is okay. 
// but $a = &(...) is error because you can not pass by reference on value (you need variable)

// You will have to do manually
$b = &$c;
$a = &$b;
etc.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.