Jump to content

[Resolvido] PHP5+OOP sugestões...


vizrs

Recommended Posts

Boas!

Tenho andado a actualizar os meus conhecimentos em PHP e neste momento gostava que me dessem uma opinião em relação à seguinte situação no ambiente OOP. Imaginemos o simples exemplo de uma class que tenha alguns metodos para tratar dados de um ficheiro, ou seja escrita, leitura e algumas verificações. Apresentando algum código teriamos:

class Ficheiro {

public function escreveFicheiro($f, $d) {

	$this->_verificaFicheiro($f);
	$handle = fopen($f, "a");
	fwrite($handle, $d);
	fclose($handle);
}

public function leFicheiro($f) {

	// instruções de leitura
}

private function _verificaFicheiro($f) {

	if (!file_exists($f))
		die("O ficheiro nao existe.");
}

}

Na class em cima, será boa politica usar o mesmo argumento ($f) que é passado no metodo escreveFicheiro($f, $d) para fazer algumas verificações através do metodo _verificaFicheiro($f)? Ou será que é melhor, criar uma propriedade privada e passar o valor de $f para a mesma e usar esta nova propriedade para testar o valor no metodo _verificaFicheiro? Ou seja:

class Ficheiro {

private $_ficheiro;

public function escreveFicheiro($f, $d) {

	$this->_ficheiro = $f;
	$this->_verificaFicheiro();

	$handle = fopen($f, "a");
	fwrite($handle, $d);
	fclose($handle);
}

public function leFicheiro($f) {

	// instruções de leitura
}

private function _verificaFicheiro() {

	if (!file_exists($this->_ficheiro))
		die("O ficheiro nao existe.");
}
}

Obrigado.

Edited by brunoais
geshi!
Link to comment
Share on other sites

isso vai depender de como programas em OOP, eu gosto de ter as variaveis que sao constantes como privadas.

fazer algo

class ficheiro
{
 private $nomeFicheiro;
 private $handler;

 public function open();
 public function close();

 public function readBytes(...);
 public function readFormated(...);

 //etc

}

Faria algo como uma class que possa ser utilizada para diferentes projectos

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Uma classe serve para organizar o comportamento de uma determinada entidade.

Antes deves responder ás seguintes questões:

1. O ficheiro para existir precisa de mais alguma coisa? (construtor)

2. O ficheiro grava-se sozinho ou preciso de mais alguma coisa para se gravar?

3. O ficheiro lê-se sozinho ou precisa de mais alguma coisa?

4. O ficheiro verifica-se sozinho? O que é verificar? verifica o que?

Assim... sugeria o seguinte:


class Ficheiro {

	private $_nome;
	private $_data = '';


	public function __constructor($nome) {
			$this->_nome = $nome;
	}

	public function importar($data) {
			$this->_data = $data;
	}

	public function escreveFicheiro($caminho) {
			if (!$this->_existeFicheiro($caminho)) return false; // Aqui não se percebe bem qual é o comportamento desejado... para que serve saber se o ficheiro existe ou não???
			$handle = @fopen($caminho.$this->_nome, "a");
			if (!$handle) return false; // Pode correr mal tentar abrir o ficheiro... depende de muitas coisas do sistema operativo...
			fwrite($handle, $this->_data);
			fclose($handle);
			return true;
	}
	public function leFicheiro($caminho) {
			// instruções de leitura
	}
	private function _existeFicheiro($caminho) {
			return file_exists($caminho.$this->_nome);
	}
}

Acho bom manter o nome e o caminho separados... podes querer gravar o mesmo ficheiro em N caminhos diferentes...

Na classe acima, o ficheiro está dependente do nome; isto é se o nome mudar, o ficheiro já não é o mesmo e deve-se criar uma nova instância para outro ficheiro...

Isto levado muito a sério criar classes para tudo vai tornar o teu programa pesado em termos de consumo de recursos (mais memória, mais tempo para correr, etc...) nem sempre vale a pena criar classes para tudo...

Edited by taviroquai
Link to comment
Share on other sites

Isto levado muito a sério criar classes para tudo vai tornar o teu programa pesado em termos de consumo de recursos (mais memória, mais tempo para correr, etc...) nem sempre vale a pena criar classes para tudo...

Sinceramente, acho que nunca precisei de usar class em php, mas tambem nao estava a pensar em reutilizar codigo e isso.

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Sinceramente, acho que nunca precisei de usar class em php, mas tambem nao estava a pensar em reutilizar codigo e isso.

Eu gosto de usar classes em PHP pela vantagem de (para mim) ser mais fácil manter o código...

Por exemplo Drupal vs Joomla!: acho Drupal horrível... basicamente é um montão de funções espalhadas pelos módulos com nomes tipo modulox_hook_form_before_submit 😕

O Joomla! está organizado em MVC Modular, com classes para os módulos... prefiro assim.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.