No więc tak, po pierwsze co do fwrite()
to to są takie niskopoziomowe funkcje, które są trochę trudniejsze w użyciu niż inne funkcje w PHP, ale za to dają większą kontrolę nad tym co PHP robi z systemem pików, także coś za coś.
Co do fwrite()
, to jak zajrzysz do dokumentacji: https://www.php.net/manual/en/function.fwrite.php to zobaczysz że jest dokładnie tak jak @cerrato mówił, czyli pierwszy argument fwrite()
to jest resource
, wskaźnik na zasób.
Więc jeśli chcesz koniecznie to zapisać tak "żeby działało", to zrób tak:
<?php
class File
{
public function openFile(): resource
{
return fopen("text.txt", "w") or die("Nie udało się utworzyć pliku");
}
public function WriteFile(): void
{
$zawartosc = "Przykładowa treść, którą umieścimy w pliku.";
fwrite($this->openFile(), $zawartosc) or die("Nie udało się zapisać danych w pliku");
}
}
Aczkolwiek tutaj jest kilka dziwnych błędów. Widać że próbujesz to zrobić obiektowo, ale niczego nie enkapsulujesz. Dodatkowo posługujesz się die()
, zamiast wyjątakmi, co ma tą wadę że ubijesz proces. Ja bym to zrobił bardziej tak:
<?php
class File
{
private string $filename;
public function __construct(string $filanem)
{
$this->filename = $filename;
}
public function exists(): bool
{
return file_exists($this->filename);
}
public function write(string $data): void
{
$result = fwrite($this->openedFile(), $data);
if ($result === false) {
throw new Exception("Nie udało się zapisać danych w pliku");
}
}
/**
* @return resource
*/
private function openedFile()
{
$file = fopen($this->filename, "w");
if ($file === false) {
throw new Exception("Nie udało się utworzyć pliku")
}
return $file;
}
}
i użycie:
<?php
$file = new File("mój plik.php");
if ($file->exists()) {
echo "plik istnieje";
} else {
echo "plik nie istnieje";
}
$file->write("Jakieś dane");