vizrs Posted June 11, 2012 at 07:14 PM Report Share #462049 Posted June 11, 2012 at 07:14 PM (edited) 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 June 12, 2012 at 10:20 AM by brunoais geshi! Link to comment Share on other sites More sharing options...
pikax Posted June 11, 2012 at 07:33 PM Report Share #462057 Posted June 11, 2012 at 07:33 PM 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 More sharing options...
taviroquai Posted June 11, 2012 at 07:56 PM Report Share #462060 Posted June 11, 2012 at 07:56 PM (edited) 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 June 11, 2012 at 07:58 PM by taviroquai Link to comment Share on other sites More sharing options...
vizrs Posted June 11, 2012 at 09:06 PM Author Report Share #462073 Posted June 11, 2012 at 09:06 PM Obrigado a ambos pela resposta/codigo apresentado, deu para tirar a minha dúvida! Link to comment Share on other sites More sharing options...
pikax Posted June 11, 2012 at 09:11 PM Report Share #462074 Posted June 11, 2012 at 09:11 PM 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 More sharing options...
taviroquai Posted June 11, 2012 at 11:43 PM Report Share #462084 Posted June 11, 2012 at 11:43 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now