Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Composition entre class php

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.

En action-script 2, vous savez surement comment une class peut lancer une occurence d'une autre class. Cela fonctionne de manière pratiquement similaire dans amfPhp.

Nous allons voir cela avec une class utile et pratique qui sera chargée de gérer toutes les requetes mysql, et en cas de problème, donnera des infos à flash concernant les erreurs d'execution.

Voici notre class /services/utils/Sql.php :

<?php
class Sql
{
	var $className = "Sql";
	var $classPackage = "utils";
	var $version = "1.0.0";
	var $author = "niko";
	var $link = "http://ressources.mediabox.fr/flashplatform/dynamique/remoting/amfphp_composition_php";
 
        var $conn;
	var $dbhost = "localhost";
	var $dbname = "nomBase";
	var $dbuser = "identifiant";
	var $dbpass = "motdepasse";
 
	function Sql ()
	{
        		$this->conn = mysql_pconnect($this->dbhost, $this->dbuser, $this->dbpass) 
        		or NetDebug::trace(mysql_error());
        		mysql_select_db($this->dbname, $this->conn) 
       		        or NetDebug::trace(mysql_error());		
	}
 
	// affichage des erreurs de requetes dans le netDebugger de flash.
	function _query ($sql)
    	{
 
        		$result = mysql_query($sql, $this->conn) 
        		or NetDebug::trace(mysql_error());
        		return $result;
    	}
 
	// transforme une string pour éviter l'injection ou les apostrophes et guillements
	// Note: mysql_escape_string est recommandé, il est plus sécure que addslashes
	function escape($param)
    	{
 
        		return mysql_escape_string($param);
        		// ou bien si on veut préciser la connexion courante :
                        // return mysql_real_escape_string($param, $this->conn);
    	}
}
?>

Cette class ne contient pas de définition de la table des méthodes, elle n'est donc pas utilisable par flash remoting. Mais elle va pouvoir l'être par une autre class php, qui supervisera les échanges entre flash et la base de données :

<?php
 
include_once("utils/Sql.php");
 
class MonService
{
	var $db;
   	function MonService()
   	{
      		$this->methodTable = array(
          			"methodeOne" => array(
             			"access"      => "remote",
             			"description" => "Vérifie login et mot de passe",
             			"arguments"   => array("login","pass")
          		)
		);
		// on assigne à $db une occurence de SqlQuery
		$this->db = new Sql();
	}
 
	function methodeOne ($login, $pass)
	{
		$login = $this->db->escape($login); 
		$pass = $this->db->escape($pass);
		$sql = "select id from utilisateur where identifiant = '$login' and motDePasse = '$pass'";
		$result = $this->db->_query($sql);
		if (mysql_affected_rows($result)>0) {
                        // on utilise mysql_affected_rows pour savoir si tout s'est bien passé (en cas de DELETE, INSERT, REPLACE, ou UPDATE) et on retourne le résultat de la requète
			return $result;
		} else {
                        // sinon on retourne 0 en cas d'erreur
			return 0;
		}
	}
}
?>

L'important, c'est la ligne $this→db = new Sql();, à l'instanciation de MonService par flash, celle-ci donne une valeur à db, celle de la class Sql, donc accéder aux méthodes de celle-ci, il suffit simplement de faire :

$this->db->nomMethode();

C'est tout simple, et trés bon pour bien architecturer ses applications.