Класс для работы с файлом в ООП PHP

Класс для работы с файлом



Создадим класс для работы с текстовым файлом (что-то в него записывать). Создадим файл index.php, папку classes c файлом File.php внутри и текстовый файл file.txt, в который мы будем что-то записывать.


Содержание папки 5 ("Класс для работы с файлом"):


05-1



В файле File.php (класс File) создадим два свойства:
- public $file - здесь будем хранить путь к файлу;
- public $fp - здесь будем хранить указатель на открытый файл, с которым мы будем работать;

и два метода:
- public function __construct($file); - конструктор будет принимать параметром наименование самого файла $file,
- public function __destruct() - деструктор.


Все магические методы рекомендуется писать в начале класса.
Все пользовательские функции - после них.


Создадим еще собственный метод, который будет что-то записывать в файл:
- public function write($text);
- данный метод будет принимать параметром строку $text, которую необходимо записать в файл.


Файл File.php


-- файл File.php --

<?php
// создание класса
class File
{
// свойства класса
public $fp; // указатель на открытый файл
public $file; // сам файл (Путь к нему)

// методы класса
public function __construct($file)
{
}
public function __destruct()
{
}
public function write($text)
{
}
}
?>




В индексном файле подключим наш класс File.

Создадим в нем экземпляр данного класса, параметром он будет принимать путь к файлу:
- $file = new File( __DIR__ . '/file.txt'):


Файл index.php


-- файл index.php --

<?php
// включаем показ ошибок
error_reporting(-1);
// подключение файла File.php
require_once 'classes/File.php';

// создаем экземпляр данного класса
// в качестве параметра передаем путь к файлу file.txt
// (этот параметр передается в конструктор)
$file = new File(__DIR__ . '/file.txt');
?>




Путь к файлу (__DIR__ . '/file.txt') передается в конструктор, соответственно, в конструкторе мы с ним можем работать. И нас интересует запись этого параметра (этого пути) в свойство публичное $file:
- $this -> file = $file;


Далее проверяем с помощью метода is_writable, доступен ли файл для записи и есть ли он вообще. Если мы эту проверку прошли, то нам необходимо файл открыть для записи. Для этого у нас есть свойство $fp - в котором мы храним указатель на открытый файл. Заполняем его:
fopen($this->file, 'a')
- теперь в свойстве fp хранится указатель на открытый файл, в который можно что-то записывать.


Поскольку у нас есть __destruct и файл после записи желательно закрывать, мы используем функцию fclose для закрытия файла.


В методе write используем функцию fwrite(). Эта функция пишет что то в файл и первым параметром мы передаем указатель:
$this->fp,
- вторым параметром мы передаем текст, который необходимо записать (он передается в виде аргумента $text). Если условие "if" равно FALSE, то выведем:
echo "Не могу произвести запись в файл {$this->file}";
и завершим работу exit.

Наш класс готов:


Файл File.php


-- файл File.php --

<?php
// создание класса
class File
{
// свойства класса

public $fp; // указатель на открытый файл
public $file; // сам файл (Путь к нему)

// методы класса

public function __construct($file)
{
// запись пути в публичное свойство file
$this -> file = $file;
// Убедимся в правильности пути
echo $this-> file = $file;
echo '<br>';
// - выведет наш путь: C:\OSPanel\domains\PHPoop1\05/file.txt

// проверяем с помощью метода is_writable, доступен-ли файл
// для записи и есть-ли он вообще?
// вместо $this->file можно теоретически использовать $file

if ( ! is_writable($this -> file))
{
echo "Файл {$this -> file} недоступен для записи";
// - записывать в двойных кавычках!!!
exit; // завершаем работу
}

// если проверку прошли, то нам необходимо открыть файл для записи
// для этого есть свойство fp ; заполняем его: fopen($this->file, 'a')
// теперь в свойстве fp хранится указатель на открытый файл,
// в который можно что-то записывать

$this -> fp = fopen( $this -> file, 'a');
}

// метод __destruc
// в деструкторе мы используем функцию fclose для закрытия файла (где fp
// - указатель на открытый файл)

public function __destruct()
{
fclose( $this -> fp );
}

// объявление собственного метода write, который будет что-то записывать в файл
// в качестве параметра он будет принимать строку $text,
// которую необходимо записать в файл

public function write($text)
{
if (fwrite ( $this -> fp, $text . PHP_EOL ) === FALSE)
// - где PHP_EOL или "\n" - перенос строки
{
echo "Не могу произвести запись в файл {$this->file}";
exit;
}
}
}
?>




В индексном файле вызываем метод write($text), и передаем ему параметром строку, которую хотим записать. Далее запускаем данный код и проверяем его работу.


Файл index.php


-- файл index.php --

<?php
// включаем показ ошибок
error_reporting(-1);
// подключение файла File.php
require_once 'classes/File.php';

// создаем экземпляр данного класса
// в качестве параметра передаем путь к файлу file.txt
// (этот параметр передается в конструктор)

$file = new File(__DIR__ . '/file.txt');

// вызываем метод write экземпляра класса $file и передаем ему
// параметром строку, которую хотим записать

$text = 'строка 1';

$file -> write($text);
$file -> write('строка 2');
$file -> write('строка 3');
$file -> write('строка 4');
$file -> write('строка 5');
?>




В текстовом файле file.txt получим:


-- файл file.txt --

строка 1
строка 2
строка 3
строка 4
строка 5







Наверх Наверх