• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zero-cool

[PHP]Classe simples de ficheiros

7 mensagens neste tópico

Viva,

Encontrei isto quando andava a explorar um projecto antigo.

É muito simples. E deve ter erros possivelmente..

<?php

class Files {
var $filename;
var $from;
var $to;
var $compress = 0;

var $to_handle;
var $from_handle;

var $content = "";

public function Copy($from,$to,$compress) {
	if (empty($to) || empty($from)) {
		die("Incomplete data. Please use Set function first.");
	}
	if (!empty($compress) && $compress != 0) {
		$this->compress=1;
	}
	$this->content = $this->GetContent($from);
	$this->SaveTo($to);
}

public function AddText($file,$text,$compress) {
	$this->content = $text;
	$this->compress = $compress;
	$this->SaveTo($file);
}

public function GetContent($file) {
	$handle = $this->Open($file);
	if (!$handle) {
		die("Could not open the file");
	}
	$content = fread($handle,filesize($file));
	$this->Close($handle);
	return $content;
}

private function Create($file,$compress) {
	if (empty($file)) {
		die("No destination file selected");
	}
	if ($compress == 1) {
		if (!bzcompress) {
			die("Bz2 module not available on your system");
		}
		$handle = bzopen($file.".bz2","w");
	} else {
		$handle = fopen($file,"w");
	}
	return $handle;
}

private function Open($file) {
	$ext = pathinfo($file);
	if (empty($ext) || empty($ext["extension"])) {
		die("File not found");
	}
	$ext = $ext["extension"];
	if ($ext == "bz2") {
		$handle = bzopen($file,"r");
	} else {
		$handle = fopen($file,"r");
	}
	if (!$handle) {
		die("Could not open the requested file");
	}
	return $handle;
}

private function Close($handle) {
	@fflush($handle);
	@fclose($handle);
	@bzflush($handle);
	@bzclose($handle);
}

private function SaveTo($file) {
	$handle = $this->Create($file,$this->compress);
	if ($this->compress == 1) {
		bzwrite($handle,$this->content);
	} else {
		fwrite($handle,$this->content);
	}
	$this->Close($handle);
}
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se tem erros, mas uns melhoramentos levava. Nomeadamente um construtor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se tem erros, mas uns melhoramentos levava. Nomeadamente um construtor.

Para?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para se poder inicializar o objecto com uma linha com os parâmetros que o programador entender e para melhor tratamento de erros.

Como está, tem que se iniciar o objecto manualmente e nada acontece. Ou seja, a instrução de inicialização acaba por não servir para nada.

Tambem não faz muito sintido inicalizar um objecto e só quando for usado é que se chega há conclusão que há requisitos que podem condizir a abortagem da operação. Se por exemplo não for possível abrir ficheiros, a criação do objecto deve falhar.

Por outras palavras, o exemplo dado usa a sintaxe de criação de classes mas não obedece ao paradigma da programaçã orientada a objectos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só não concordo com a ideia de um construtor, porque tem duas funções candidatas a construtor com objectivos distintos:

- Open

- Create

Mas poderia ser uma classe com métodos estáticos, talvez...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas poderia ser uma classe com métodos estáticos, talvez...

O que é isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixas de precisar de instanciar o objecto. Isto é, em vez de:

$xpto = new ois();
$xpto->metodo();

fazes só

ois::metodo();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora