Eddu Posted November 4, 2007 at 12:53 AM Report Share #145055 Posted November 4, 2007 at 12:53 AM Boas Pessoal, para quem já trabalhou em java, e passou por algum motivo para php, decerto que sentiu uma comechãozinha por php não ter a sua linguagem nativa orientada a objectos, uma díficil adatptação aos arrays. o que eu pensei, foi aprender os arrays em php, mas criar uma classe que se assemelhe ao que já existe no java, por exemplo: DefaultListModel, Vector, ArrayList, etc... gostava de perguntar se algum de vocês conhece uma classe destas já iimplementada, vou dexar um poco de codigo do que comecei á 10 min a fazer, para melhor perceberem aquilo que prentendo. obrigado, Carlos Correia CODIGO: <?php class DefaultArray{ protected $array; function __construct(){ $this->array = array(); } function addElement($element){ $this->array[]=$element; } function getElementAt($index){ if(isset($this->array[$index])) return $this->array[$index]; else return "ERROR: POSITION NOT FOUND: ".$index; } function getFirst(){ if (isset($this->array[0])) return $this->array[0]; else return "ERROR: POSITION NOT FOUND: ".$index; } function getLast(){ $last_position=count($this->array)-1; if (isset($this->array[$last_position])) return $this->array[$last_position]; else return "ERROR: POSITION NOT FOUND: ".$index; } function getSize(){ return count($this->array); } } ?> Link to comment Share on other sites More sharing options...
djthyrax Posted November 4, 2007 at 03:04 AM Report Share #145079 Posted November 4, 2007 at 03:04 AM Podes escolher a chave a atribuir a um valor numa DefaultArray em Java? Se sim, tens isso mal implementado na getFirst() só para começar. 😕 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Sven Posted November 4, 2007 at 03:45 PM Report Share #145166 Posted November 4, 2007 at 03:45 PM Viva, Eu pessoalmente acho um mau uso de recursos estares a encapsular as funções de array do php num classe, sem lhes trazeres valor acrescentado. Para alem de reduzires a performance não estás a ter mais valia nenhuma e perdes tempo a "reinventar a roda" percebo que para quem vem do java o php possa ser confuso, mas acho que tens muito a ganhar em compreender a forma de funcionamento e lógica do php em vez de o tentar tornar num "java for web" Writing software is more fun than workingO covil do Barão Link to comment Share on other sites More sharing options...
Eddu Posted November 4, 2007 at 08:29 PM Author Report Share #145275 Posted November 4, 2007 at 08:29 PM boas Sven, cada um tem a sua maneira de programar, e cada um tem o seu gosto por determinados aspectos. em relação ao php, tem algumas coisas que gosto, outras que nem tanto exemplo: em várias linguagens que não php, tens sempre a hipotese de ter arrays ou então listas, sendo as últimas muito mais dinamicas e melhoram o trabalho um codigo mais complexo. o php só contem arrays, o que será útil, com alguma maquiagem, transformar uma linguagem não orientada a objectos para uma classe orientada a objectos. Caso tenhas passado pela faculdade, existem várias cadeiras que te ensinam a fazer este tipo de coisas, para teres código reutilizável e simples de usar, o que com outro tipo de comandos sería mais complexo. Abraço Link to comment Share on other sites More sharing options...
djthyrax Posted November 4, 2007 at 09:07 PM Report Share #145287 Posted November 4, 2007 at 09:07 PM Just in case, http://pt2.php.net/array funções para manipulação de arrays. 😛 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pedrotuga Posted November 4, 2007 at 09:53 PM Report Share #145295 Posted November 4, 2007 at 09:53 PM eddu, php tem suporte completo para programação orientada a objectos. Não é o uso do operador de acesso '.' que determina o que é uma lingagem orientada a objectos. O php os arrays têm ponteiro internos que pode ser percorridos por loops foreach por exemplo. foreach($array as $elemento){ // yeah baby } Para alem disso são multidimensionais e associativos. Não estou ver que grande vantagem traga uma classe para uso de arrays, basicamente vais estar a embrulhar não sei quantas funções noutros tantos métodos de uma classe. Se quiseres uma lista ligada ou suplamente ligada... sí sim, uma classe pode dar jeito, agora para arrays, na minha opiniao é reinventar a roda. Link to comment Share on other sites More sharing options...
Eddu Posted November 5, 2007 at 02:36 PM Author Report Share #145361 Posted November 5, 2007 at 02:36 PM certo pessoal, como ja disse, o que estou a fazer é apenas maquiar o que o php tem, e por doutra forma, é sabido que ira degradar um poco a performance, mas isso envolve mais uns saltos no program counter, o que nao trará muita degradação, se tivermos em conta que um processador de 3.0Ghz, executa 3 milhoes de calculos por segundo, um jump de uma função para outra, envolve umas modificações no program counter (2 ou 3 calculos). sinceramente irá dar-me jeito, para ter o meu codigo mais legível, gosto de conseguir reutiilizar codigo, e nao programar caso a caso, estou então a criar várias classes que me podem ser úteis na criação de sites orientados a Objectos Link to comment Share on other sites More sharing options...
djthyrax Posted November 5, 2007 at 07:39 PM Report Share #145432 Posted November 5, 2007 at 07:39 PM Tá-se bem, mas não me respondeste a isto: Podes escolher a chave a atribuir a um valor numa DefaultArray em Java? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
MX+ Posted November 6, 2007 at 02:01 AM Report Share #145531 Posted November 6, 2007 at 02:01 AM Eu percebo perfeitamente a tua intençao de fazer isso. Foi lançado com o PHP5 algumas interfaces (http://devzone.zend.com/article/2565-The-Standard-PHP-Library-SPL), que permitem dar alguma abstração ao código (as-in ensinado em Java). Aspectos que melhorava na tua class seria: - Usar exceptions em vez de retornar mensagens de erro. - No getFirst e getLast usar o reset() e end() para retoranr primeiro e ultimo valor dum array - Mudar o nome da class. - "parametrizar" a class (fazer uma especie de emulaçao). Pedir um tipo no constructor e exigi-lo aquando da inserção de elementos. - Criar interfaces de ordenaçao, para que as pessoas implementassem comparable e comparator e a classe geria essa ordenaçao. 🙂 Link to comment Share on other sites More sharing options...
Eddu Posted November 8, 2007 at 08:39 PM Author Report Share #146204 Posted November 8, 2007 at 08:39 PM ja posto aqui a versao semi final que ando a testar, depois criticam e sugerem alterações como fez o Mx+ Link to comment Share on other sites More sharing options...
Eddu Posted November 8, 2007 at 08:40 PM Author Report Share #146205 Posted November 8, 2007 at 08:40 PM <?php /** *************************** * Author: Carlos Correia * * Version: 0.1 * * Date: 06/11/2007 * *************************** */ class DefaultArray{ protected $array; /** * Construct an empty array */ function __construct(){ $this->array = array(); } /** * Add an element to the end of array * @param object $element */ function addLast($element){ $this->array[]=$element; } /** * Add an element to the begin of array * @param object $element */ function addFirst($element){ array_unshift($this->array,$element); } /** * Add element in array into position * indicate by the index argument * @param int $index * @param object $element */ function addElementAt($index,$element){ if($index>=0 and $index<=count($this->array)) array_splice($this->array,$index,0,$element); else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); if($index<0) throw new Exception('INDEX IS NEGATIVE'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * replace an element in array into position indicate * by the index argument * @param int $index * @param object $element */ function setElementAt($index,$element){ if (isset($this->array[$index])) { $this->array[$index]=$element; } else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); if($index<0) throw new Exception('INDEX IS NEGATIVE'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Return an element in array, indicate by the * index argument * @param int $index * @return object */ function getElementAt($index){ if(isset($this->array[$index])) return $this->array[$index]; else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); if($index<0) throw new Exception('INDEX IS NEGATIVE'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Return the first element in array * @return object */ function getFirst(){ if (isset($this->array[0])) return $this->array[0]; else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * return the last element in array * @return object */ function getLast(){ $last_position=count($this->array)-1; if (isset($this->array[$last_position])) return $this->array[$last_position]; else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Remove the first element in array * @return object */ function removeFirst(){ if (isset($this->array[0])) return array_shift($this->array); else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Remove the last element in aray * @return object */ function removeLast(){ $last_position=count($this->array)-1; if ($last_position>=0) return array_pop($this->array); else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Remove an element in position indicate by * the index argument * @param int $index * @return removed element */ function removeElementAt($index){ if(isset($this->array[$index])){ $removed = array_splice($this->array,$index,1); return $removed[0]; } else try { if(count($this->array)==0) throw new Exception('EMPTY ARRAY'); if($index<0) throw new Exception('INDEX IS NEGATIVE'); else throw new Exception('POSITION NOT FOUND'); }catch (Exception $e){echo $e; exit;} } /** * Append currente array with other array * given by argument * @param DefaultArray or Array */ function appendArray($array){ if (is_a($array,'DefaultArray')) $this->array=array_merge($this->array,$array->getArray()); elseif(is_array($array)) $this->array=array_merge($this->array,$array); else try { throw new Exception('ARGUMENT IS INVALID'); }catch (Exception $e){echo $e; exit;} } /** * @return int size of array */ function getSize(){ return count($this->array); } /** * write a tree of values in array * @return string */ function toString(){ return var_export($this->array,true); } /** * Return array * @return array */ function getArray(){ return $this->array; } } ?> Link to comment Share on other sites More sharing options...
Eddu Posted November 8, 2007 at 08:41 PM Author Report Share #146206 Posted November 8, 2007 at 08:41 PM Pessoal, nao liguem ao meu inglês, é mesmo o meu inglês 😞 mais ninguem percebe. Essa é a versão que ando a testar, ainda nao encontrei bug's assinaláveis. Link to comment Share on other sites More sharing options...
djthyrax Posted November 8, 2007 at 08:49 PM Report Share #146208 Posted November 8, 2007 at 08:49 PM No toString(), tens a certeza que não queres é o serialize()? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pedrotuga Posted November 8, 2007 at 10:06 PM Report Share #146239 Posted November 8, 2007 at 10:06 PM Um ponteiro, ou outro tipo de referencia tipo um índice numérico para um elemento pode ser pratico para quando se pretende percorrer a lista sem ser toda de uma vez. É uma coisa que podes adicionar... se entenderes claro. Bem cool esse código. Afixa aí umas linhas de código exemplo para o pessal ver o potencial desta classe. Temos um wiki na calha, isto é uma boa classe para lá por. Link to comment Share on other sites More sharing options...
MX+ Posted November 10, 2007 at 08:10 PM Report Share #146627 Posted November 10, 2007 at 08:10 PM Uma coisa importante, as excepções quando as lanças não é para serem apanhadas dentro da própria função ; ) Deixa as excepções sairém em paz : D Se não te importares vou implementar o iterable. Link to comment Share on other sites More sharing options...
Eddu Posted November 10, 2007 at 09:45 PM Author Report Share #146649 Posted November 10, 2007 at 09:45 PM Boas Mx+, em relação as exepções, neste caso tive que implementar na função, porque nao fazia sentido cada vez que utilizasse a função, ter que fazer um try catch.e assim se houver algum problema na chamada á função, o programador vê logo o que se está a passar, emr elação as implementações, implementem mais, ou alterem, e de seguida postem aqui, para todos podemros ver.. abraços 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