Ben daha önce hiç rastlamamıştım PHP Sembol

8 Cevap php

Ben muhtemelen olmalıdır, ama ben daha önce hiç görmemiştim. Smarty Plugin belgelemesi üzerinde ararken içine koştu.

$smarty =& new Smarty;

= & Özellikle açın. Google bunu girerseniz, sadece başka bir arama motoru gibi, göz ardı alır. Bu ne için kullanılır?

Aynı bu fonksiyon imza için de geçerli:

function connect(&$smarty, $reset = false)

Neden & sembolü?

8 Cevap

Aslında, bu kod PHP 4 ile uyumlu olacak şekilde yazılır (Tim dedi - PHP 5, tüm nesneler referans olarak geçirilir) Ampersan PHP5'te işe yaramaz..

With PHP 4, all variables were passed by value. If you wanted to pass it by reference, you had to declare a reference assignment :

$ref_on_my_object =& new MyObject();

Bu kod hala PHP 5 varsayılan yapılandırmayla kabul, ama yazmak daha iyi olduğu:

$ref_on_my_object = new MyObject(); // Reference assignment is implicit

For your second problem, the issue is "almost" the same... Because PHP lets you declare function arguments (resp. types), and you can't do it for return values. An accepted, but "not so good" practice is to avoid reference declaration within the function's declaration :

function foo($my_arg) {    
    // Some processing
}

ve referans ile çağrı ...

$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function

İdeal beyanı gibi daha fazla olacaktır:

function foo( & $my_input_arg ) {    
    // Some processing
}

sonra, çağrı işareti kaybeder:

$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function

& passes an argument by reference. Arama işlevi değiştirilmiş nesne almak böylece bu şekilde, connect() $smarty nesne işleyebilirsiniz.

Benzer şekilde, =& Bir değişkeni ayarlar.

Tim bir değişkene onun bir başvuru dediği gibi. PHP'nin son sürümünü kullanıyorsanız eğer Ama sonra tüm sınıf nesnesi yine referans olarak geçirilir. Eğer olsa diziler veya diğer yerleşik türleri hakkında geçiyordu eğer hala bu gerekir.

İlk örnek, ikinci başvuru geçiyor, başvuru dönüyor.

Siz PHP bu konuda okuma manual olabilir

& PHP'nin referans operatörüdür. Bu nesneye bir başvuru döndürmek için kullanılır. Bu durumda "yeni Smarty" in.

Ampersan yerine nesnenin değerinden daha değişken bir başvuru atar.

Ampersan operatörün başlıca amaçlarından biri bellek adresi ile geçmektir. Bu değişken değişti istediğiniz zaman genellikle bir şeydir, ancak iade edilmeyecektir.

function test_array(&$arr)
{
    $varr[] = "test2";
}
$var = array('test');
test_array($var);

print_r($var);

this should output

array( test , test2 );

Başka bir işlev / nesnesi haline ile çalıştığınız gerçek kopya [bellek adresi] geçmesi gerektiğinde bu amaçla genellikle. Tipik bir bellek eksikliği hafifletmek ve performansını hızlandırmak için geçmişte kullanılan, o C / C + + ve birkaç diğer düşük seviyeli dillerden bir özellik.