Ссылки на объекты PHP в фреймворках - PullRequest
0 голосов
/ 18 апреля 2010

Прежде чем я погрузлюсь в часть, посвященную обсуждению, я задам быстрый вопрос; Есть ли способ определить, является ли переменная ссылкой на другую переменную / объект? (Просто хочу проверить, правильно ли я передаю ссылки и не делаю дубликаты версий моих объектов). Например

$foo = 'Hello World';
$bar = &$foo;
echo (is_reference($bar) ? 'Is reference' : 'Is orginal';

Я использую PHP5 уже несколько лет (только для личного использования), и я бы сказал, что я умеренно обращен к теме объектно-ориентированной реализации. Однако концепция Model View Controller Framework является для меня довольно новой.

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

Я привык реализовывать ссылки на объекты в следующей технике.

class Foo{
    public $var = 'Hello World!';
}
class Bar{
    public function __construct(){
        global $Foo;
        echo $Foo->var;
    }
}
$Foo = new Foo;
$Bar = new Bar;

Я был удивлен, увидев, что CodeIgnitor и Yii передают ссылки на объекты и могут быть доступны с помощью следующего метода:

$this->load->view('argument')

Непосредственное преимущество, которое я вижу, - гораздо меньше кода и удобство для пользователя. Но мне интересно, будет ли он более эффективным, так как эти структуры предположительно оптимизированы? Или просто сделать код более удобным для пользователя? Или какое-то другое преимущество? Это была интересная статья Не использовать ссылки PHP .

Причина, по которой я спрашиваю, состоит в том, что я пытаюсь собрать основу для личного проекта и для кривой обучения.

UPDATE

$Baz = $Foo;
$Baz->var = 'Goodbye World!';
echo $Foo->var;

/* Ouput */
Goodbye World!

Мне немного стыдно сказать, что я не ожидал, что это даст такой результат. Конечно, теперь все намного проще.

1 Ответ

1 голос
/ 18 апреля 2010

Оператор & - это способ передачи объектов по ссылке в PHP4, PHP5 делает это по умолчанию. Код, который все еще использует этот оператор, должен быть обратно совместимым.

Вы все еще можете использовать & для передачи других типов данных по ссылке в PHP5, но необходимость в этом очень редка, и я предлагаю избегать этого.

...