Иногда бывает трудно объяснить человеческим языком, что вы хотите сделать в программировании, но я буду стараться ...Создать новую копию самого объекта с некоторыми новыми свойствами
Пожалуйста, объясните мне, как я могу реализовать следующая логика. Предположим, что у нас есть шаблонный класс:
$obj1=new Tmpl($somevar1, $somevar2, ...);
//we then add a new file to template
//as we don't have any files yet, new object won't created
$obj1->AddTmpl('file1.tmpl');
//we add a second file to template,
//it will be independent template
//but all properties from $obj1 must be available
$obj2=$obj1->AddTmpl('file2.tmpl');
$obj1->printTmplFile(); //should output file1.tmpl
$obj2->printTmplFile(); //should output file2.tmpl
$obj2->printInitialVars();
//will print $somevar1, $somevar2 constructed for $obj1;
//$obj1 of course must have these variables available also
Таким образом, цель ее в создании нового объекта для каждого нового файла шаблона. Каждый новый объект должен иметь весь набор свойств, которые были установлены для старого объекта. Таким образом, в этом случае, например, мы не будем вызывать конструктор каждый раз с теми же аргументами. Также только $ obj1 может создать копию самого себя. И если это первый вызов метода AddTmpl, то мы не создаем новую копию.
Это называется клонированием. – Pierreten