2010-04-18 1 views
0

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

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

Я использую PHP5 в течение нескольких лет (только для персонального использования), и я бы сказал, что я в меру вспять на тему объектов Orientated реализации. Однако концепция 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 и Y проходят referencs объектов и могут быть доступны с помощью следующего метода:

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

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

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

UPDATE

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

/* Ouput */ 
Goodbye World! 

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

ответ

1

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

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