Хотя приведенный метод обходится без массива $st rings, это не значит, что другие методы не могут его использовать. Тогда класс должен обладать конструктором, который заполняет строки, как это делает класс для вывода датского языка.
С польским объектом мы работаем точно так же, как с английским и датским объектами:
Sobj = new Polish_0utput(); echo(Sobj->outNumFiles(7)); // 7 plikyw.
Имейте в виду, что весь приведенный код можно загрузить с веб-сайта Wrox http://www.wrox.com/.%d0%9f%d0%be%d0%bb%d0%bd%d1%8b%d0%b9"> http://www.wrox.com/.Полный пример, использующий все три объекта, хранится как оbjес12. php, а все классы хранятся в файле className. php.
Интеграция класса вывода и сценария
Выяснив, насколько просто переключаться между разными языками путем создания нескольких объектов, посмотрим, как обращаться с этими объектами в реальном сценарии.
Прежде всего, надо избавиться от создания объекта для конкретного языка. Приложение должно иметь возможность переключаться между языками на этапе исполнения, поэтому язык не должен жестко кодироваться в сценарии.
Объект для вывода должен быть сделан членом родительского В на
шем примере родительский объект следит за количеством посещений каждым пользователем. Назовем объект для вывода output:
<?pbp
class App {
var $output;
function App(Slanguage) {
$this->setLanguage($language);
}
function setLanguage($new_language) {
; ;switch ($new_language)Sje case "da':
$this->output = new Danish_Output();
break;
case 'pi' ;
$this->putput = new Polish_Output();
break;
default:
$this->output = new English_Output();
break;
)
}
}
?>
В этом классе есть метод, с помощью которого происходит пе
реход на другой язык. Данный метод принимает в качестве аргумента код страны и пытается найти его в списке языков. Найдя язык, он создает член- объект.
Затем создаем новый объект:
$obj = new Арр( 'аа ');
$obj->output->outNumFiles(2);
Обратите внимание на две стрелки ->. Это необходимо, чтобы получить доступ к методу outNumFiles() объекта вывода. Первая стрелка обеспечивает доступ к члену-объекту с именем output, а вторая - к нужному нам методу. Изменим язык:
$obj->setLanguage('en");
Теперь наша функция setLanguage() присваивает $obj->output новый объект вывода и выбрасывает прежний объект, поскольку он больше не нужен. Зачем использовать вложенные объекты? Приведенный пример очень невелик. В реальном приложении объект Арр может быть гораздо больше и сложнее. Приложение может выбирать данные из базы, выполнять над ними расчеты и представлять результат пользователю. В такой ситуации выбрасывать объект Арр неэффективно, поскольку в нем содержатся результаты. Чтобы переключить язык, пришлось бы заново делать выборку данных и выполнять вычисления.