Как открыть файл ооп
Требуется PHP класс работы с файлами: в первую очередь - синтаксис и алгоритмы. Готовая реализация - будет замечательно.
Не смотря на всю кажущуюся простоту, этот вопрос считаю достаточно сложным. Мне не удалось найти готового скрипта.
Во-первых, в PHP существует несколько инструментов работы с файлами (fopen() и file_get_contents()) и класс должен самостоятельно выбирать оптимальный;
Во-вторых, по одному из параметров класс должен определять необходимость "целостности данных", то есть исключить возможность одновременного редактирования файла;
В-третьих, он должен работать с файлами различных типов;
В-четвертых, он должен исправлять ошибки отсутствия файлов с учетом того, что новый файл не всегда должен создаваться.
Это должен быть класс "на все случаи жизни" и обеспечивать оптимальный код, с учетом того, что прямой доступ к к файлам скриптам будет запрещен. Один объект - один файл.
Класс, методы которого повторяют стандартные функции PHP неприемлем!
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Нужен класс для работы с файлами
Не как не могу найти нормальный класс для работы с файлами, а ведь очень нужен, если такой есть, то.
Класс для работы с файлами
Люди добрые, подскажите в каком конце искать работу с файлами, такую как копирование, удаление.
Класс для работы с файлами
День добрый. Столкнулся со следующей проблемой. Задание: создать класс, инкапсулирующий работу с.
Мой класс для работы с файлами
Здравствуйте! Я попробовал сделать свой класс для работы с файлами и показать его здесь с целью.
Спасибо за участие!
Проблема в том, что, при отсутствии опыта, тяжело определить потребность. Хочу минимум кода в скрипте обращающемся к классу и максимальной прозрачности. Например, открытие файла происходит, при создании объекта, при этом в параметрах указываю, как я хочу с ним работать. Допустим, я хочу его редактировать, но не блокировать, чтобы не тормозить другие сценарии. Тогда объект сам определит, был ли изменен файл в промежутке до записи. Или мне "пофигу" кто, что писал, я командую и зачем мне fopen().
С другой стороны, иногда мне нужно открыть файл независимо от того, был ли он создан, или открыть "сессию" работы с файлом и уже после решать, нужно ли создавать файл, в случае отсутствия.
В общем, я хочу максимально просто открыть файл, получить разностороннюю информацию о файле и принять решение, будет ли выполняться действие. Оптимизация скрипта не самое главное, поэтому, если вы меня запустите в нужном направлении и расскажите, как это будет выглядеть, где и что должно храниться, буду примного благодарен.
Привожу, что сам "накропал", может поможет вам получить представление о том, что я хочу.
"Папа нарисуй куклу. Нет, это девочка. Нарисуй куклу". Примерно так и со мной?Вы имели в виду черновик? Простите не разобрался. Видимо с этого нужно было начинать:
Любительские скрипты полны примеров, где: там и сям работаем с файлами и каждый раз поразному. Там заблокировать забыли, в итоге "летит" правильная блокировка, здесь еще что-либо. Из обнаруженных мною скриптов, они просто транслируют функционал PHP, что совершенно не решает проблемы. В PEAR не совсем разобрался, но и решения проблем, так же не увидел.
Решил:
Инсталлятор запрещает использовать функции и конструкции вида MyClass::Method(). Файл, БД и т.д. - это ресурс. Доступ к ресурсу, только через объект. Отдельно хочу создать глобальный, с точки зрения ресурса данного вида, объект, через который можно получить доступ к образу ресурса (объекта) до создания самого объекта (в черновике - трайт "IfaceIsFile"). Исходя из этой информации, скрипт должен будер решать, будет ли он работать с ресурсом и как. Это стратегия системы.
Исходя из этого, класс должен предоставлять некоторую информацию о ресурсе еще до создания объекта, конструктор объекта должен выполнить всю черновую работу и гарантировать корректную работу методов, алгоритм работы и доступность которых может изменяться, в зависимости от того, как был создан ресурс (текстовый файл или бинарный, простое редактирование или гарантировать сохранность данных). Например, когда два пользователя редактирую одну страницу, важно проверять, не была ли она изменена в процессе редактирования (дишь для примера), когда же администратор редактирует конфигурацию системы, вероятно ему пофиг, что там меняют другие пользователи.
ГЛАВНОЕ: этот класс, уверен, успешно созданный с вашим участием (скорее, вами), будет методикой создания остальных ресурсов системы.
Добавлено через 9 часов 38 минут
Обещались помочь. Видимо, со мной все совсем плохо
Класс– это механизм для создания новых типов. Синтаксис описания класса похож на синтаксис описания структуры. В отличие от структур в языке СИ членами структуры в языке С++ кроме переменных могут быть и функции. В С++ для создания структуры (класса) традиционно принято использовать ключевое слово class, но допускается использовать и struct.
Функции объявлены при описании класса, но они еще не определены.
Запуск программы с использованием переменных и функций созданного типа
Контрольные задания. Создайте программу в проекте консольного приложения.и и запустите ее. Если в программах есть ошибки, исправьте их. Обратите внимание на следующее:
- описание класса должно предшествовать его использованию;
- к закрытым переменным и функциям можно обращаться только в определениях функций класса.
Прочитайте код программы, используя терминологию программиста (см. комментарии к программе).
В языке VLISP нет различия между операциями и функциями. Операции в C\C++ также можно воспринимать как функции, которые отличаются лишь синтаксисом выражения. Язык С++ позволяет перегружать и операции.
Многие из операций выполняются над различными типами переменных – бесформатный ввод-вывод (<< и >>) или математические операции (+, -) и т. д. Пример:
Прочитайте код программы, используя терминологию программиста (см. комментарии к программе).
Встраиваемые функции рассмотрим на следующем примере фрагмента программы:
Встраиваемые функции действуют почти так же, как и директивы препроцессора, в том смысле, что тело функции вставляется в место вызова функции до компиляции. Замена вызова функции на ее определение ускоряет работу программы. Поэтому рекомендуется многократно используемым в цикле функциям давать статус встраиваемых (inline).
Кроме этого, inline функции обеспечивают более стройный способ встраивания в программу короткой функции (см. 1-й способ встраивания). Также, компилятор С++ гораздо лучше работает со встраиваемыми функциями, чем с директивами препроцессора и другими макроопределениями.
Конструктор – метод, который вызывается автоматически при создании объекта.
Деструктор – метод, который вызывается автоматически при уничтожении объекта.
Для обоих имя совпадает с именем класса (для деструктора добавляется
Обычно конструктор используется для создания и инициализации переменных объекта, деструктор – для очистки памяти от них. Пример:
Результат работы программы:
В классе может быть определено несколько конструкторов. Конструкторы могут иметь параметры. Пример:
Контрольное задание. Еще до запуска программы определите, что выведется на печать? Выведите на печать переменную y объекта B.
Обращение к закрытым переменным через открытые методы наподобие PublicMethod() входит в число стандартных приемов программирования; тем самым удается ограничить доступ к закрытым данным класса. Пример:
Результат работы программы:
Контрольное задание. Соблюдая терминологию прочитайте последовательно программу от инициализации переменной PrivateDataMember до ее вывода на печать.
Объекты можно передавать в качестве аргументов функции точно так же, как передаются данные других типов. Пример:
Эта программа напечатает следующее:
Тот факт, что конструктор вызывается один раз, а деструктор вызывается дважды, может стать потенциальным источником проблем. Поэтому, предпочитают использовать параметр-указатель или параметр-ссылку. По сути различие между первым и вторым лишь в синтаксисе написания.
Параметр-ссылка
Параметры-ссылки имеют некоторые преимущества по сравнению с аналогичными альтернативными параметрами-указателями. Во-первых, нет необходимости получать и передавать в функцию адрес аргумента, адрес передается автоматически. Во-вторых, ссылки предлагают более понятный и элегантный интерфейс.
Пример 1:
Пример 2:
При реализации наследования возможна передача параметров из конструктора производного к конструктору базового класса, при этом допускается, чтобы конструктор базового класса имел больше параметров, чем конструктор производного класса.
В результате работы программы на экран выведутся числа 7 и 1.
Программа читается в последовательности, указанной пунктами: 1, 2, 3. После объявления объекта (1) вызывается конструктор базового класса (2), а потом производного (3). Передача 2-х параметров конструктору базового класса обусловлена синтаксисом определения конструктора базового класса (3)
Ниже рассмотрен пример наследования класса Circle от класса Point.
Обратите внимание на одинаковые по содержанию функции (методы).
Правило для виртуальных методов. Если функция объявлена виртуальной и разработчик переопределил ее в производном классе, то при вызове виртуальной функции из некоторой функции базового класса может быть вызвана как функция объекта производного класса так и базового класса. Чем определяется выбор? Типом объекта, через который реализуется обращение к функции.
Теперь, из функции отца Point::MoveTo (int newX, int newY) будут вызываться виртуальные функции производного класса Circle::Hide() и Circle::Show() , если было обращение к функции MoveTo реализуется через объект производного класса: C.MoveTo (300,100) . В случае обращения к функции MoveTo через объект базового класса pointA.MoveTo (300,100) из функции отца Point::MoveTo (int newX, int newY) будут вызываться виртуальные функции базового класса Point::Hide() и Point::Show()
В программе на языке Си память динамически выделяется функциями malloc и calloc. Функция free (p) освобождает область памяти, на которую ссылается указатель p. Но при создании объекта в С++ используется конструктор. А функция malloc (), разработанная задолго до появления на свет С++, понятия не имеет о конструкторах.
В языке С++ для выделения памяти используется оператор new , который не только выделяет память, но и вызывает соответствующий конструктор:
Параметры, указанные после имени объекта, передаются конструктору.
Когда необходимость в объекте, созданном оператором new, отпадет, освободиться от него можно с помощью оператора delete.
Если этого не сделать, то объект удалится только после окончания работы приложения.
Читайте также: