2015-05-16 4 views
2

Я знаю, что & используется для ссылок, и я видел раньше, как:Какова цель & перед именем функции?

$foo = &$bar; 

или

function foo(&$bar) {...} 

или

foreach($array as &$value) {...} 

И я знаю, что & означает в вышеуказанных ситуациях ,


Но я видел эту функцию в CodeIgniter:

function &get_instance() { 
    return CI_Controller::get_instance(); 
} 

Я никогда не видел & перед именем функции прежде. Что делает & сделать в вышеуказанной функции?

ответ

5

Это называется returning by reference, оно просто ограничивает возвращаемое значение переменной, к которой вы ее назначили. В руководстве есть наглядный пример:

<?php 

    class foo { 
     public $value = 42; 

     public function &getValue() { 
      return $this->value; 
     } 
    } 

    $obj = new foo(); 
    $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. 
    $obj->value = 2; 
    echo $myValue;    // prints the new value of $obj->value, i.e. 2. 

?> 
+0

Спасибо за ответ. Я чувствую, что это хорошая идея не использовать его вообще, потому что он может вводить сложные проблемы для отладки (возможно, это также причина, почему никто не видит, что это используется довольно часто). Спасибо – Dev01

+0

@ Dev01 Добро пожаловать. – Rizier123

+0

@ Dev01: просто указывая на важное использование оператора '&' в CI: 'get_instance'. Выполнение, скажем, '$ CI = get_instance();' вернет новый экземпляр MY_Controller (плохая идея!), В то время как '$ CI = & get_instance();' вернет текущий экземпляр. – SolarBear

Смежные вопросы