Прежде чем я погрузиться в часть рассеянности, задайте быстрый вопрос; Есть ли способ определить, является ли переменная ссылкой на другую переменную/объект? (Просто хочу проверить, что я правильно передаю ссылки и не делаю повторяющихся версий моих объектов). НапримерСсылки на объекты 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!
Я немного смущен, чтобы сказать, что я не ожидал этого, чтобы дать этот выход. Разумеется, теперь все становится намного проще.