<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Breve introdução a PHP Chaining e Singleton ⁄ >




clicks: 11223 11223 2008-04-06 2008-04-06 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This



Primeiro de tudo php chaining e singleton estão dissociados um do outro, apenas os juntei neste snippet :)

Em breves palavras, basicamente o Singleton é um Design Pattern, que vai permitir que o nosso objecto possa ser instanciado uma única vez, independentemente do número de vezes que tentemos instanciar um objecto, este só será instanciado a 1ª vez, as consequentes tentativas não será permitidas, podendo por ex. exibir uma mensagem ou pura e simplesmente ignorando o pedido. Isto faz com que, por ex., seja poupado o consumo de memória; geralmente é usado para permitir uma maior performance da aplicação.

O método de chaining foi inserido na versão 5 do PHP, permite que possamos encadear instruções, porém somente numa única linha de código, pode parecer confuso, mas é um termo muito simples, que se percebe logo no 1º exemplo prático.

Suponhamos que temos uma calculadora que faz as 4 operações básicas: soma, subtração, multiplicação e divisão. Se por ex. quiseremos somar (5+5), poderiamos fazer desta maneira (partindo do principio que tinhamos um objecto MathBasic e esse objecto tivesse dois métodos, um dos quais chamado Sum que recebia unicamente um valor e internamente a Class tinha um acumulador que iria guardando os consequentes resultados das diferentes operações; e o outro Result que tão somente iria retornar o resultado desse tal acumulador, ou seja o resultado da soma):


$math=new MathBasic();
$math->Sum(5);
$math->Sum(5);
echo $math->Result();




Com o PHP Chaining podemos passar isto apenas para 2 linhas de código. Basicamente o truque é quando é invocado um método do objecto, será retornado o próprio objecto usando:


return $this;





Vamos então construir a nossa class, que tanto vai suportar o Design Pattern Singleton, como o método de chaining.



class.SingletonBasicMath.php
  1. <?php
  2.  
  3. /**
  4. * Class SingletonBasicMath
  5. * Esta class serve como exemplo para a implementação
  6. * de PHP Chaining e o uso de Singleton
  7. */
  8. class SingletonBasicMath {
  9.  
  10. private static $_instance;
  11. private $_value = 0;
  12.  
  13. /**
  14. * Método Construtor
  15. * Vai impossibilitar que sejam criadas várias instâncias do objecto
  16. */
  17. public function __construct() {
  18. //permite só que seja criada uma única instância de um objecto (Singleton)
  19. if (!self::$_instance) {
  20. self::$_instance = $this;
  21. }
  22. else {
  23. echo "<br> --- Só é permitida uma instância SingletonBasicMath --- <br>";
  24. }
  25. }
  26.  
  27. public function Sum($value) {
  28. $this->_value += $value;
  29. return $this;
  30. }
  31.  
  32. public function Subtract($value) {
  33. $this->_value -= $value;
  34. return $this;
  35. }
  36.  
  37. public function Multiply($value) {
  38. $this->_value *= $value;
  39. return $this;
  40. }
  41.  
  42. public function Divide($value) {
  43. $this->_value /= $value;
  44. return $this;
  45. }
  46.  
  47. public function Reset() {
  48. $this->_value = 0;
  49. return $this;
  50. }
  51.  
  52. public function Result() {return $this->_value;}
  53.  
  54. public function toString() {return "<br>Result = {$this->Result()}<br>";}
  55.  
  56. /**
  57. * Eliminar referências do objecto
  58. */
  59. public function __destruct() {
  60. $this->_value = null;
  61. self::$_instance = null;
  62. }
  63. }
  64.  
  65. ?>
  66.  




Ficheiro de Exmplo
  1. <?php
  2. include_once 'class.SingletonBasicMath.php';
  3.  
  4. $math= new SingletonBasicMath();
  5.  
  6. $result=$math->Sum(1)->Subtract(2)->Multiply(1)->Divide(1)->Result();
  7. echo $result; //vai imprimir -1
  8. echo $math->toString(); //vai imprimir Result = -1
  9.  
  10. //vai imprimir Result = 108
  11. echo $math->Reset()->Sum(4)->Sum(8)->Sum(15)->Sum(16)->Sum(23)->Sum(42)->toString();
  12. $math->Subtract(42)->Subtract(23)->Subtract(16)->Subtract(15)->Subtract(8)->Subtract(4);
  13. echo $math->Result(); //vai imprimir: 0
  14.  
  15. // ao executarmos esta linha de código irá ser visualizada a seguinte mensagem:
  16. // --- Só é permitida uma instância SingletonBasicMath ---
  17. $math2= new SingletonBasicMath();
  18.  
  19. $math->Reset(); //"reiniciar" a calculadora
  20. $math->Sum(5);
  21. echo $math->toString(); //vai imprimir: Result = 5
  22.  
  23. //já não precisamos do objecto
  24. $math->__destruct();
  25. ?>



Este será o output gerado:


-1
Result = -1

Result = 108
0
--- Só é permitida uma instância SingletonBasicMath ---

Result = 5




Qualquer erro/ dúvida é só dizer!









clicks: 11223 11223 2008-04-06 2008-04-06 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This