Cordial Saludo.
Estoy probando el patron de diseño singleton para cuando el servidor reciba una peticion de ajax, no cree instancias nuevas cada vez que hallan peticiones, sin embargo observo que en el ejercicio que estoy realizando siempre crea una nueva instancia.
Código HTML:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<label>a</label>
<input type="number" name="a">
<label>a</label>
<input type="number" name="b">
<button id="suma">Sumar</button>
<button id="ver">Ver</button>
</body>
</html>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function(){
$("#suma").click(function(){
var a = $("input[name='a']").val();
var b = $("input[name='a']").val();
var json = {"uno":a,"dos":b};
$.post("server.php",{"suma":JSON.stringify(json)},function(data){
var data = $.parseJSON(data);
console.log(data);
alert(data);
});
});
$("#ver").click(function(){
$.post("server.php",{"retorna":"si"},function(data){
var data = $.parseJSON(data);
console.log(data);
alert(data);
});
});
});
</script>
Clase Modelo
Código PHP:
<?php
class modelo {
public $a = 0;
public $b = 0;
public $c;
public function __construct(){
}
public function suma($a,$b){
$this->c = $a+$b;
return $this->c;
}
public function ver_resultado(){
return $this->c;
}
}
clase singleton
Código PHP:
<?php
include_once "modelo.php";
class Singleton{
private static $instancia;
private $opera;
public function __construct(){
$this->opera = new modelo();
}
public static function singleton(){
if (!isset(self::$instancia)) {
$miclase = __CLASS__;
self::$instancia = new $miclase;
//echo "creado";
}else{
//echo "ya creado";
}
return self::$instancia;
}
public function suma($a,$b){
$data = $this->opera->suma($a,$b);
return $data;
}
public function ver_resultado(){
$data = $this->opera->ver_resultado();
return $data;
}
}
Donde recibe las peticiones ajax sin embargo siempre crea una nueva instancia
Código PHP:
<?php
include_once "singleton.php";
$modelo = Singleton::singleton();
if(isset($_POST['suma'])){
$data = json_decode($_POST['suma'],true);
$suma = $modelo->suma($data['uno'],$data['dos']);
echo json_encode($suma);
}
if(isset($_POST['retorna'])){
$respon = $modelo->ver_resultado();
echo json_encode($respon);
}