explicitType dynamique pour AMFPHP
Par NairuS le samedi, mars 27 2010, 14:15 - PHP 5 - Lien permanent
Hello,
Je sais que cela fait un bon moment que je n'ai pas écrit d'article sur mon blog.
Et pour cause, j'étais en train de développer mon propre framework PHP pour me faciliter la tâche avec les applications AMFPHP.
J'utilise cette occasion pour annoncer officiellement la sortie de la version 1.0 de kassiop.
La plupart des classes du framework ont été unitestées avec PHPUnit 3.4.9.
La documentation a été générée avec PHPDocumentor 1.4.3 et est en ligne ici.
Ce framework permet d'automatiser une bonne partie des développements avec AMFPHP et notamment la déclaration du 'explicitType' des ValueObject.
Dans le package kassiop.system.data.vo il y a une classe abstraite ValueObject qui en étant hérité par les autres classes permet de définir dynamiquement la propriété 'explicitType' nécessaire pour le class mapping entre PHP et AS2/AS3.
Analysons le constructeur:
/**
* Creates an instance of ValueObject
*
* @param array $init
* @param ValueObject $init
* @return void
*/
public function __construct( array $init = array(), $package = null )
{
if( !empty( $init ) )
{
$reflection = new ReflectionClass( $this ) ;
foreach( $init as $key => $value )
{
if( $reflection->hasProperty( $key ) )
{
$this->$key = $value ;
}
}
}
if( $package !== null )
{
$package .= '.' ;
}
$this->_explicitType = $package . get_class( $this ) ;
}
Deux paramètres peuvent être envoyés: $init et $package.
- $init: est un tableau indéxé qui au moyen de la réflexion permet de remplir l'objet uniquement sur ses propres propriétés. Cette méthode permet d'exclure les données non déclarées dans le ValueObject.
- $package: est une chaine de caractère qui permet de spécifier si le ValueObject côté AS a été enregistré avec son nom de package.
Je reparlerai sous peu de mon travail sur kassiop.
N'hésitez à suivre l'évolution du framework sur google code et ohloh!
Enjoy 
Commentaires
Petite question ? pourquoi un tel outil ? qu'apporte t'il de plus que Zend_AMF ?
Peut on le linker dans Symfony ?
Utilise t'il les namespace ? comme Symfony 2 ?
Et t'il juste un plugin pour AMFPHP ?