El patrón singleton, una única instancia de una clase

En ocasiones puede ser que necesitemos que una clase esté instanciada una, y solo una, vez durante la ejecución de nuestra aplicación. Para ello podemos hacer uso del patrón de diseño singleton. Para ello tenemos que definir el constructor como privado, para evitar que se puedan crear instancias desde fuera de los métodos de la clase; una variable estática privada, que contendrá una instancia de la clase; un método con el que obtendremos dicha instancia y también sobreescribiremos el método __clone para que no se pueda clonar la clase. Veámoslo con un ejemplo:

<?php

class Singleton {

	private static $singleton = NULL;

	private function __construct()
	{
		// Código del constructor.
		echo "constructor Singleton.";
	}
	// Método que nos devuelve la instancia de la clase.
	public static function getSingleton()
	{
		// Si la clase no está instanciada la creamos.
		if(self::$singleton == NULL)
		{
			self::$singleton = new Singleton();
		}

		// Devolvemos la instancia de la clase
		return self::$singleton;
	}

	// Sobreescribimos el método __clone para que produzca un error.
	public function __clone()
	{
		trigger_error("No se puede clonar la clase Singleton.", E_USER_ERROR);
	}
}
?>

Cuando queramos hacer uso de esta clase tendremos que llamar a Singleton::getSingleton(), que nos devuelve la instancia única de la clase. Esto nos puede ser útil, por ejemplo, para el manejo de las conexiones a base de datos o para hacernos una clase que maneje la configuración.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

La clase stdClass de PHP

En PHP existe una clase predefinida en el lenguaje que se llama stdClass. ¿Y que hace tan especial a esta clase? Pues que no tiene ni propiedades, ni métodos, ni padre; es una clase vacía. ¿Y para que queremos esta clase si no tiene nada? Podemos usar esta clase cuando necesitamos un objeto genérico al que luego el podremos añadir propiedades. Veamos un ejemplo:

<?php

$objecto = new stdClass();
$objeto->nombre = "Manuel";
$objeto->apellidos "Carrascosa de la Blanca";
$objeto->web = "http://mjcarrascosa.com";
?>

Con este código hemos creado un objeto al que luego le hemos añadido tres atributos. Esto nos puede servir cuando queremos tener un objeto que solo tenga datos y, por la razón que sea, no queremos crear una clase específica.

Hay que tener en cuenta, y esto es muy importante, que esta clase no es la clase de la que heredan todas las clases. En PHP las clases que no heredan de ninguna clase simplemente no tienen padre. En esto PHP se diferencia de muchos lenguajes de programación, donde si una clase no tiene padre hereda automáticamente de una clase base por defecto (como en Java la clase Object).

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tutorial de FCKeditor. Parte I.

Hola a todos. Vamos a comenzar un tutorial sobre un editor WYSIWYG llamado FCKeditor. Para empezar vamos a ver un pequeño ejemplo que pasaré a explicar después.

FCKEditorEjemplo1.html:

<html>
<head>
<title>Ejemplo FCKEditor</title>
<script type="text/javascript" src="./fckeditor/fckeditor.js"></script>
</head>
<body>
<form action="form.php" method="post">
<script>
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
oFCKeditor.BasePath	= document.location.href.substring(0, document.location.href.lastIndexOf('/')) + "/fckeditor/";
oFCKeditor.Height	= 300 ;
oFCKeditor.Value	= '<p>Esto es un <strong>texto de ejemplo<\/strong>.<\/p>' ;
oFCKeditor.Create() ;
</script>
<input type="submit"/>
</form>
</body>
</html>

Lo primero que hacemos es incluir el script fckeditor.js. Este script se encuentra dentro de la carpeta fckeditor. A continuación creamos un formulario que será procesado por el script form.php y al que se le enviarán los datos mediante el método POST.

Después metemos algo de código JavaScript. Lo que hacemos es crear un objeto de la clase FCKeditor. Esto lo hacemos en la primera linea del script. A continuación configuramos el editor, indicándole la ruta base (oFCKeditor.BasePath), la altura (oFCKeditor.Height) y el contenido del editor (oFCKeditor.Value). Una vez hecho esto creamos el editor llamando al método Create.

A continuación, y ya fuera del script, ponemos un Submit para que envíe los datos al script encargado de procesar el formulario. Veamos el código de dicho script:

form.php:

<html>
<head>
<title>Ejemplo FCKEditor</title>
<script type="text/javascript" src="./fckeditor/fckeditor.js"></script>
</head>
<body>
<h1>C&oacute;digo del texto introducido</h1>
<pre>
<?php
	if (get_magic_quotes_gpc())
		echo htmlspecialchars(stripslashes($_POST['FCKeditor1']));
	else
		echo htmlspecialchars($_POST['FCKeditor1']);
?>
</pre>
</body>
</html>

Este script lo único que hace es mostrarnos el código del texto introducido en el editor.

Podéis ver un ejemplo del código aquí. Y como es costumbre descargaros el código de los ejemplos. Para poder ver el ejemplo tenéis que descargar el editor y ponerlo dentro de una carpeta llamada fckeditor.

Primer Ejemplo de FCKeditor

P.D.: Esta entrada me ha costado un poco, ha habido algunos problemas con el ejemplo, de modo que puede haber problemas al hacer que funcione el ejemplo. Si tenéis alguna duda podéis preguntar sin problema en los comentarios.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Iconos para redes sociales

Navegando por Internet he encontrado una colección de iconos circulares pare redes sociales publicados en BlogPerfume:

Social Media Icons Pack in 3 Sizes for Download

Algo que nos puede resultar útil para hacernos una barra de enlaces a las redes sociales en las que estemos dados de alta.

Artículos relacionados:

  • No Related Post
Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Los efectos especiales de jQuery

Ya he hablado anteriormente del framework jQuery. Hoy vamos a comentar los efectos especiales que implementa el framework.

Efectos básicos:

Efecto Descripción
Show() Muestra los elementos seleccionados.
Show(speed, callback) Muestra los elementos seleccionados a la velocidad indicada y al final lanza un callback si se ha indicado.
hide() Oculta los elementos seleccionados.
hide(speed, callback) Oculta los elementos seleccionados a la velocidad indicada y al final lanza un callback si se ha indicado.
toggle() Conmuta la visibilidad de los elementos seleccionados.
toggle(switch) Conmuta la visibilidad de los elementos seleccionados en función del valor del parámetro switch. Si es true lo muestra, si es false lo oculta.
toggle(speed, callback) Conmuta la visibilidad de los elementos seleccionados a una velocidad dada y lanza un callback si se ha indicado.

Efectos móviles:

Efecto Descripción
slideDown(speed, callback) Despliega los elementos seleccionados a una velocidad dada y lanza un callback si se ha indicado.
slideUp(speed, callback) Encoge los elementos seleccionados a una velocidad dada y lanza un callback si se ha indicada.
slideToggle(speed, callback) Muestra u oculta el elemento mediante despliegue dependiendo de como estuviera. Al final lanza un callback si se ha indicado.

Efectos de fundido:

Efecto Descripción
fadeIn(speed, callback) Muestra mediante un fundido los elementos seleccionados. Al final lanza un callback si se ha indicado.
fadeOut(speed, callback) Oculta mediante un fundido los elementos seleccionados. Al final lanza un callback si se ha indicado.
fadeTo(speed, opacity, callback) Realiza un fundido de los elementos seleccionados hasta la opacidad indicada. La opacidad es un número entre 0 (transparente) y 1 (opaco). Al final lanza un callback si se ha indicado.

En todos los métodos en los que se puede indicar la velocidad esta tomara los valores ‘slow’, ‘normal’, ‘fast’ o el número de milisegundos que durará la animación.

Después de esto vamos a ver un pequeño ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Efectos especiales con jQuery</title>
<script src="jquery.js" type="text/javascript"></script>
<style>
 .cuadro {
 	background-color:#4682b4;
 	color: #fff;
 	padding: 5px;
 	width: 400px;
 	border-width: 2px;
 	border-color: #000;
 	border-style: solid;
 }
</style>
</head>
<body>
<h1>Efectos especiales con jQuery</h1>
<a href="#" onclick="$('#c1').show();">[show]</a> <a href="#" onclick="$('#c1').hide();">[hide]</a> <a href="#" onclick="$('#c1').toggle();">[toggle]</a><br/>
<a href="#" onclick="$('#c1').slideDown('slow');">[slideDown]</a> <a href="#" onclick="$('#c1').slideUp('slow');">[slideUp]</a> <a href="#" onclick="$('#c1').slideToggle('slow');">[slideToggle]</a><br/>
<a href="#" onclick="$('#c1').fadeIn('slow');">[fadeIn]</a> <a href="#" onclick="$('#c1').fadeOut('slow');">[fadeOut]</a><br/>
<a href="#" onclick="$('#c1').fadeTo('slow', 0);">[fadeTo 0%]</a> <a href="#" onclick="$('#c1').fadeTo('slow', 0.25);">[fadeTo 25%]</a>
<a href="#" onclick="$('#c1').fadeTo('slow', 0.5);">[fadeTo 50%]</a> <a href="#" onclick="$('#c1').fadeTo('slow', 0.75);">[fadeTo 75%]</a>
<a href="#" onclick="$('#c1').fadeTo('slow', 1);">[fadeTo 100%]</a><br/>
<div id="c1" class="cuadro">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at mauris risus.
Duis ornare euismod fringilla. Etiam nec ante sem, a cursus massa. Duis rutrum
metus blandit tellus rhoncus quis sodales lacus porttitor. Quisque posuere,
metus eu imperdiet egestas, diam justo ornare est, quis lacinia enim eros id massa.
Curabitur volutpat porta iaculis. Proin vitae elit sodales leo lacinia tincidunt.
</div>
</body>
</html>

Podéis ver este ejemplo en acción aquí. También podéis descargar el código con los ejemplos, algo recomendado para poder tocar si queréis:

Ejemplo de efectos con jQuery

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto