Я работаю над оболочкой, которая анализирует файл данных для существующего веб-инструмента. Тем не менее, я использую большие файлы данных, поэтому я не могу загрузить все это в память, поэтому я должен пройти через него, загружая его небольшими кусками. Существующий веб-инструмент ожидает, что данные в стиле, подобном SimpleXML ($ obj-> parentnode-> childnode-> childnode, возвращают строку или объект-узел какого-либо типа). К счастью, структура похожа на XML, но синтаксис нечетный. И я не могу просто перевести его в нормальный формат из-за смягчающих обстоятельств. Поэтому я должен подражать ему на лету.Клонированный объект должен использовать одиночный дескриптор файла или у каждого есть свой собственный?
Поскольку я просматриваю файл, мне не нужно будет разбирать все дерево, а именно имена узлов этого узла. Каждое имя узла и связанное с ним смещение будут сохранены в родительском узле. Если необходимо получить доступ к содержимому подузла, то объект-родительский узел будет клонирован, значения смещения будут обновлены, и объект под-узла начнет разбирать его контент до тех пор, пока он не найдет запрошенный субнод.
Вопросы у меня есть:
- Клонирование объект родительского узла даст ребенок клонов дескриптор файла. Должны ли все клоны использовать один и тот же дескриптор и использовать fseek, чтобы прыгать по файлу, если это необходимо (и это довольно большой, если)?
- Нужно ли мне закрыть файл? Или будет ли сбор мусора в конце выполнения скрипта закрыть его? С какими опасностями я сталкиваюсь, если нет?
- Должен ли я создавать ручки для каждого клона, или я должен придерживаться их совместного использования? Если да, то есть верхний предел?
- Есть ли способ клонированного объекта сохранить ссылку на исходный объект? Если я помещаю дескриптор в деструктор объекта, я, вероятно, не должен его закрывать, если объект является клоном. И, возможно, может быть полезно отслеживать вверх.
Хорошо, это маркировки как клон я получаю. Но как я могу ссылаться на исходный объект? $ this-> parent =? what? –
см. Мое редактирование для очень элементарного примера. – prodigitalson
Я думал, что __clone был вызван клоном при создании? Кроме того, ни один из примеров кода не возвращает клон. –