cvs: phpdoc-fr /reference/objaggregation reference.xml /reference/objaggregation/functions aggregate-methods-by-list.xml
aggregate-methods-by-regexp.xml aggregate-methods.xml aggregate-properties.xml aggregate.xml aggregation-info.xml deaggregate.xml
| From: | Damien Seguy | Date: | Fri, 25 Oct 2002 19:10:31 +0000 |
| Subject: | cvs: phpdoc-fr /reference/objaggregation reference.xml /reference/objaggregation/functions aggregate-methods-by-list.xml aggregate-methods-by-regexp.xml aggregate-methods.xml aggregate-properties.xml aggregate.xml aggregation-info.xml deaggregate.xml |
||
| Groups: | php.doc.fr | ||
| Request: | Send a blank email to doc-fr+get-103@lists.php.net to get a copy of this message | ||
dams Fri Oct 25 15:10:31 2002 EDT
Added files:
/phpdoc-fr/reference/objaggregation reference.xml
/phpdoc-fr/reference/objaggregation/functions
aggregate-methods-by-list.xml
aggregate-methods-by-regexp.xml
aggregate-methods.xml
aggregate-properties.xml
aggregate.xml
aggregation-info.xml
deaggregate.xml
Log:
initial translation
Index: phpdoc-fr/reference/objaggregation/reference.xml +++ phpdoc-fr/reference/objaggregation/reference.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <reference id="ref.objaggregation"> <title>Aggregation d'objets/Composition de fonctions</title> <titleabbrev>Aggregation d'objets</titleabbrev> <partintro id="objaggregation.partintro"> &warn.experimental; <section id="objaggregation.intro"> &reftitle.intro; <para> En programmation objet, il est courant de rencontrer la combinaison de classes simples (et de leurs instances) en une classe plus complexe. C'est une strategie habile pour mettre en place des objets complexes, et des hierarchies d'objets. Ce système peut fonctionne comme une alternative dynamique à l'héritage multiple. Il y a deux solutions pour combiner deux classes, suivant la relation de leurs éléments constitutifs : L'<emphasis>Association</emphasis> et l'<emphasis>Aggregation</emphasis>. </para> <para> Une <emphasis>Association</emphasis> est une combinaison d'éléments construits indépendamment et visibles à l'extérieur. Lorsque nous associons des classes ou objets, chacun garde une référence à l'autre partie de l'association. Lorsque nous associons des classes statiquement, une classe contient une référence à une instance de l'autre classe. Par exemple : <example> <title>Association de classe</title> <programlisting role="php"> <![CDATA[ <?php class DateTime { function DateTime() { // constructeur vide } function now() { return date("Y-m-d H:i:s"); } } class Report { var $_dt = new DateTime(); // autres propriétés ... function Report() { // initialisation du code ... } function generateReport() { $dateTime = $_dt->now(); // autre code } // autres méthodes ... } $rep = new Report(); ?> ]]> </programlisting> </example> Nous pouvons aussi associer des instances dynamiquement, en passant une référence au constructeur (ou par une autre méthode), ce qui permet de gérer dynamiquement l'association entre les objets. Nous allons modifier l'exemple ci-dessus pour illustrer ce point : <example> <title>Association d'objets</title> <programlisting role="php"> <![CDATA[ <?php class DateTime { // identique au précédent exemple } class DateTimePlus { var $_format; function DateTimePlus($format="Y-m-d H:i:s") { $this->_format = $format } function now() { return date($this->_format); } } class Report { var $_dt; // Nous allons garder la référence à DateTime ici // autre propriétés function Report() { // initialisation } function setDateTime(&$dt) { $this->_dt =& $dt; } function generateReport() { $dateTime = $_dt->now(); // autre code ... } // autres méthodes ... } $rep = new Report(); $dt = new DateTime(); $dtp = new DateTimePlus("l, F j, Y (h:i:s a, T)"); // Génératino du rapport avec une simple date $rep->setDateTime(&$dt); echo $rep->generateReport(); // plus loin dans le code // generation du rapport avec une date designée $rep->setDateTime(&$dtp); $output = $rep->generateReport(); // sauvegarde pour affichage dans la base // ... etc ... ?> ]]> </programlisting> </example> </para> <para> L'<emphasis>Aggregation</emphasis>, d'un autre coté, implique l'encapsulation et le masquage des parties de la combinaison. Nous pouvons aggréger des classes en utilisant une méthode statique, grâce aux sous-classes (mais PHP ne supporte pas bien les sous classes), et dans ce cas, la définition de la classe aggrégée n'est pas accessible, sauf via les méthodes de la classe contenant. L'aggregation d'instances (aggrégation d'objets) implique la création dynamique de sous-objets à l'intérieur d'un autre objet, et dans le même temps, l'extension des capacités de l'objet principal (en terme de méthodes accessibles). </para> <para> L'aggrégation d'object est une méthode naturelle pour représenter des relation de type tout-partie (par exemple, une molécule est une aggrégation d'atomes), ou bien peut être utilisée pour obtenir un effet équivalent à l'héritage multiple, sans avoir à lier plusieurs classes et leurs interfaces. En fait, les aggrégations d'objets sont plus souples, car nous pouvons alors sélectionner les méthodes et les propriétés qui sont transmises à l'objet aggrégé. </para> </section> <section id="objaggregation.examples"> &reftitle.examples; <para> Nous définissons trois classes, qui implémentent chacune une méthode de stockage différente : </para> <para> <example> <title>storage_classes.inc</title> <programlisting role="php"> <![CDATA[ <?php class FileStorage { var $data; function FileStorage($data) { $this->data = $data; } function write($name) { $fp = fopen(name, "w"); fwrite($fp, $this->data); fclose($data); } } class WDDXStorage { var $data; var $version = "1.0"; var $_id; // variable "privée" function WDDXStorage($data) { $this->data = $data; $this->_id = $this->_genID(); } function store() { if ($this->_id) { $pid = wddx_packet_start($this->_id); wddx_add_vars($pid, "this->data"); $packet = wddx_packet_end($pid); } else { $packet = wddx_serialize_value($this->data); } $dbh = dba_open("varstore", "w", "gdbm"); dba_insert(md5(uniqid("",true)), $packet, $dbh); dba_close($dbh); } // méthode privée function _genID() { return md5(uniqid(rand(),true)); } } class DBStorage { var $data; var $dbtype = "mysql"; function DBStorage($data) { $this->data = $data; } function save() { $dbh = mysql_connect(); mysql_select_db("storage", $dbh); $serdata = serialize($this->data); mysql_query("insert into vars ('$serdata',now())", $dbh); mysql_close($dbh); } } ?> ]]> </programlisting> </example> </para> <para> Puis, nous instantion quelques objets issue de ces classes, et nous réalisons des aggrégations et désaggrégations, tout en affichant quelques résultats : </para> <para> <example> <title>test_aggregation.php</title> <programlisting role="php"> <![CDATA[ <?php include "storageclasses.inc"; // quelques utilitaires function p_arr($arr) { foreach($arr as $k=>$v) $out[] = "\t$k => $v"; return implode("\n", $out); } function object_info($obj) { $out[] = "Classe : ".get_class($obj); foreach(get_object_vars($obj) as $var=>$val) if (is_array($val)) $out[] = "propriété : $var (array)\n".p_arr($val); else $out[] = "propriété : $var = $val"; foreach(get_class_methods($obj) as $method) $out[] = "méthode : $method"; return implode("\n", $out); } $data = array(M_PI, "kludge != cruft"); // créons quelques objets simples $fs = new FileStorage($data); $ws = new WDDXStorage($data); // affichons des informations sur ces objets echo "\$fs object\n"; echo object_info($fs)."\n"; echo "\n\$ws object\n"; echo object_info($ws)."\n"; // maintenant, quelques aggrégations echo "\nAggrégeons \$fs avec la classe WDDXStorage\n"; aggregate($fs, "WDDXStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; echo "\nAggrégeons le résultat avec la classe DBStorage \n"; aggregate($fs, "DBStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; echo "\nEt finalement, désaggrégeons WDDXStorage\n"; deaggregate($fs, "WDDXStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; ?> ]]> </programlisting> </example> </para> <para> Etudions maintenant le résultat du script pour comprendre les effets secondaires et les limitations des aggrégations d'objets en PHP. D'abord, nous avons créé <varname>$fs</varname> et <varname>$ws</varname> et ils fournissent le bon résultat (suivant la définition de leur classe). Notez que dans le but de l'aggrégation d'objets, <emphasis>les éléments privés d'une classe ou d'un objet doivent commencer par un souligné ("_")</emphasis>, même si il n'y a pas de distinction réelle entre un objet privé et un objet public. </para> <para> <informalexample> <programlisting> <![CDATA[ L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft méthode : filestorage méthode : write L'objet $ws Classe : wddxstorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 propriété : _id = ID::9bb2b640764d4370eb04808af8b076a5 méthode : wddxstorage méthode : store méthode : _genid ]]> </programlisting> </informalexample> </para> <para> Nous aggrégeons alors <varname>$fs</varname> avec la classe <classname>WDDXStorage</classname>, et nous affichons les informations. Nous pouvons aussi vior que même si l'objet <varname>$fs</varname> est toujours du type <classname>FileStorage</classname>, il a maintenant la propriété <varname>$version</varname>, et la méthode <function>store</function>, qui sont définies dans <classname>WDDXStorage</classname>. Une chose importante à noter est que les éléments privés n'ont pas été aggrégés, même si ils sont présents dans l'objet <varname>$ws</varname>. Un autre absent est le constructeur de <classname>WDDXStorage</classname>, qu'il n'est pas logique d'aggréger. </para> <para> <informalexample> <programlisting> <![CDATA[ Aggrégeons \$fs avec la classe WDDXStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 méthode : filestorage méthode : write méthode : store ]]> </programlisting> </informalexample> </para> <para> Le processus d'aggrégation est cumulatif, ce qui fait que lorsque nous aggrégeons <varname>$fs</varname> avec la classe <classname>DBStorage</classname>, nous générons un objet qui peut utiliser n'importe laquelle des méthodes de stockage de ces classes. </para> <para> <informalexample> <programlisting> <![CDATA[ Aggrégeons le résultat avec la classe DBStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 propriété : dbtype = mysql méthode : filestorage méthode : write méthode : store méthode : save ]]> </programlisting> </informalexample> </para> <para> Finalement, de la même façon que nous avons aggrégés les méthodes et propriétés dynamiquement, nous pouvons aussi les désaggrégéer. Si vous désaggrégeons la classe <classname>WDDXStorage</classname> de l'objet <varname>$fs</varname>, nous allons obtenir : </para> <para> <informalexample> <programlisting> <![CDATA[ Et finalement, désaggrégeons WDDXStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : dbtype = mysql méthode : filestorage méthode : write méthode : save ]]> </programlisting> </informalexample> </para> <para> Un point que nous n'avons pas mentionnéé ci-dessus et que l'aggrégation ne va pas écraser les méthodes ou propriétés déjà existantes dans l'objet principal. Par exemple, la classe <classname>FileStorage</classname> définit une propriété <varname>$data</varname>, et la classe <classname>WDDXStorage</classname> aussi. Mais cette dernière ne sera pas impliquée dans l'aggrégation. </para> </section> </partintro> &reference.objaggregation.functions; </reference> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-list.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-list.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods-by-list"> <refnamediv> <refname>aggregate_methods_by_list</refname> <refpurpose> Aggrège sélectivement les méthodes d'une classe grâce à une liste </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods_by_list</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> <methodparam><type>array</type><parameter>methods_list</parameter></methodparam> <methodparam choice='opt'><type>boolean</type><parameter>exclude</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods_by_list</function> aggrège les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, en filtrant les méthodes aggrégées grâce à la liste <parameter>methods_list</parameter>, appliquée au nom de la méthode. Le paramètre optionnel <parameter>exclude</parameter> sert à décider si l'expression régulière sélectionne les méthodes ( <parameter>exclude</parameter> vaut &false; sa valeur par défaut), ou bien si elle sert à identifier les méthodes qui doivent être exclues (<parameter>exclude</parameter> vaut &true;). </para> <para> Le constructeur de classe et les méthodes dont le nom commence par un caractère souligné ("_"), qui sont considérées comme privées, sont toujours exclues. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-regexp.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-regexp.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods-by-regexp"> <refnamediv> <refname>aggregate_methods_by_regexp</refname> <refpurpose> Aggrège sélectivement les méthodes d'une classe grâce à une expression régulière </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods_by_regexp</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> <methodparam><type>string</type><parameter>regexp</parameter></methodparam> <methodparam choice='opt'><type>boolean</type><parameter>exclude</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods_by_regexp</function> aggrège les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, en filtrant les méthodes aggrégées grâce à l'expression régulière <parameter>regexp</parameter>, appliquée au nom de la méthode. Le paramètre optionnel <parameter>exclude</parameter> sert à décider si l'expression régulière sélectionne les méthodes ( <parameter>exclude</parameter> vaut &false; sa valeur par défaut), ou bien si elle sert à identifier les méthodes qui doivent être exclues (<parameter>exclude</parameter> vaut &true;). </para> <para> Le constructeur de classe et les méthodes dont le nom commence par un caractère souligné ("_"), qui sont considérées comme privées, sont toujours exclues. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods"> <refnamediv> <refname>aggregate_methods</refname> <refpurpose> Aggrège dynamiquement les méthodes d'une classe à un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods</function> aggège toutes les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, sauf les méthodes dont le nom commence par un souligné ("_"), qui sont considérées commes privées, et donc ignorées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-properties.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-properties.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-properties"> <refnamediv> <refname>aggregate_properties</refname> <refpurpose> Aggrège dynamiquement les propriétés d'une classe à un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_properties</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_properties</function> aggège toutes les propriétés de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, sauf les propriétés dont le nom commence par un souligné ("_"), qui sont considérées commes privées, et donc ignorées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function>, <function>aggregate_info</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate"> <refnamediv> <refname>aggregate</refname> <refpurpose> Aggrège dynamiquemetn des classes et objets </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate</function> aggrège les méthodes et propriétés de la classe <parameter>class_name</parameter> dans l'objet <parameter>object</parameter>. Les méthodes et propriétés commençant par un souligné ("_") sont considérées comme privées et ignorées dans le processus d'aggrégation. Les constructeurs sont aussi exclus de l'aggrégation. </para> <simpara> Voir aussi <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregation-info.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregation-info.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregation-info"> <refnamediv> <refname>aggregation_info</refname> <refpurpose> Retourne un tableau associatif décrivant les classes aggrégées </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>array</type><methodname>aggregation_info</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> </methodsynopsis> <para> <function>aggregation_info</function> retourne les informations d'aggrégation pour l'objet <parameter>object</parameter>, sous la forme d'un tableau associatif. Les clés de ce tableau sont les noms des classes aggrégées. </para> <para> Par exemple, le code ci-dessous <example> <title>Exemple avec <function>aggregation_info</function></title> <programlisting role='php'> <![CDATA[ <?php class Slicer { var $vegetable; function Slicer($vegetable) { $this->vegetable = $vegetable; } function slice_it($num_cuts) { echo "Tranchage\n"; for ($i=0; $i < $num_cuts; $i++) { // un peu de tranchage some slicing } } } class Dicer { var $vegetable; var $rotation_angle = 90; // degrés function Dicer($vegetable) { $this->vegetable = $vegetable; } function dice_it($num_cuts) { echo "Coupe suivant une direction\n"; for ($i=0; $i < $num_cuts; $i++) { // tranchage } $this->rotate($this->rotation_angle); echo "Coupe suivant une autre direction\n"; for ($i=0; $i < $num_cuts; $i++) { // tranchage encoer } } function rotate($deg) { echo "Rotation de {$this->vegetable} {$deg} degrés\n"; } function _secret_super_dicing($num_cuts) { // secret industriel, a ne pas montrer. } } $obj = new Slicer('onion'); aggregate($obj, 'Dicer'); print_r(aggregate_info($obj)); ?> ]]> </programlisting> </example> </para> <para> va produire le résultat suivant <informalexample> <programlisting> <![CDATA[ Array ( [dicer] => Array ( [methods] => Array ( [0] => dice_it [1] => rotate ) [properties] => Array ( [0] => rotation_angle ) ) ) ]]> </programlisting> </informalexample> Comme vous pouvez le voir, toutes les méthodes et propriétés de <classname>Dicer</classname> ont été aggrégées dans notre nouvel objet, a l'excéption de la classe constructuer, et de la méthode <methodname>_secret_super_dicing</methodname> </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/deaggregate.xml +++ phpdoc-fr/reference/objaggregation/functions/deaggregate.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.deaggregate"> <refnamediv> <refname>deaggregate</refname> <refpurpose> Desaggrège un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>object_aggregation</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam choice='opt'><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>object_aggregation</function> supprime les méthodes et propriétés de la classe <parameter>class_name</parameter>, qui ont été aggrégées dans l'objet <parameter>object</parameter>. Si le paramètre optionnel <parameter>class_name</parameter> est passé, seules les méthodes et propriétés de cette classe sont désaggrégées. Sinon, toutes les méthodes et propriétés aggrégées sont retirées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>aggregate_info</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->
Index: phpdoc-fr/reference/objaggregation/reference.xml +++ phpdoc-fr/reference/objaggregation/reference.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <reference id="ref.objaggregation"> <title>Aggregation d'objets/Composition de fonctions</title> <titleabbrev>Aggregation d'objets</titleabbrev> <partintro id="objaggregation.partintro"> &warn.experimental; <section id="objaggregation.intro"> &reftitle.intro; <para> En programmation objet, il est courant de rencontrer la combinaison de classes simples (et de leurs instances) en une classe plus complexe. C'est une strategie habile pour mettre en place des objets complexes, et des hierarchies d'objets. Ce système peut fonctionne comme une alternative dynamique à l'héritage multiple. Il y a deux solutions pour combiner deux classes, suivant la relation de leurs éléments constitutifs : L'<emphasis>Association</emphasis> et l'<emphasis>Aggregation</emphasis>. </para> <para> Une <emphasis>Association</emphasis> est une combinaison d'éléments construits indépendamment et visibles à l'extérieur. Lorsque nous associons des classes ou objets, chacun garde une référence à l'autre partie de l'association. Lorsque nous associons des classes statiquement, une classe contient une référence à une instance de l'autre classe. Par exemple : <example> <title>Association de classe</title> <programlisting role="php"> <![CDATA[ <?php class DateTime { function DateTime() { // constructeur vide } function now() { return date("Y-m-d H:i:s"); } } class Report { var $_dt = new DateTime(); // autres propriétés ... function Report() { // initialisation du code ... } function generateReport() { $dateTime = $_dt->now(); // autre code } // autres méthodes ... } $rep = new Report(); ?> ]]> </programlisting> </example> Nous pouvons aussi associer des instances dynamiquement, en passant une référence au constructeur (ou par une autre méthode), ce qui permet de gérer dynamiquement l'association entre les objets. Nous allons modifier l'exemple ci-dessus pour illustrer ce point : <example> <title>Association d'objets</title> <programlisting role="php"> <![CDATA[ <?php class DateTime { // identique au précédent exemple } class DateTimePlus { var $_format; function DateTimePlus($format="Y-m-d H:i:s") { $this->_format = $format } function now() { return date($this->_format); } } class Report { var $_dt; // Nous allons garder la référence à DateTime ici // autre propriétés function Report() { // initialisation } function setDateTime(&$dt) { $this->_dt =& $dt; } function generateReport() { $dateTime = $_dt->now(); // autre code ... } // autres méthodes ... } $rep = new Report(); $dt = new DateTime(); $dtp = new DateTimePlus("l, F j, Y (h:i:s a, T)"); // Génératino du rapport avec une simple date $rep->setDateTime(&$dt); echo $rep->generateReport(); // plus loin dans le code // generation du rapport avec une date designée $rep->setDateTime(&$dtp); $output = $rep->generateReport(); // sauvegarde pour affichage dans la base // ... etc ... ?> ]]> </programlisting> </example> </para> <para> L'<emphasis>Aggregation</emphasis>, d'un autre coté, implique l'encapsulation et le masquage des parties de la combinaison. Nous pouvons aggréger des classes en utilisant une méthode statique, grâce aux sous-classes (mais PHP ne supporte pas bien les sous classes), et dans ce cas, la définition de la classe aggrégée n'est pas accessible, sauf via les méthodes de la classe contenant. L'aggregation d'instances (aggrégation d'objets) implique la création dynamique de sous-objets à l'intérieur d'un autre objet, et dans le même temps, l'extension des capacités de l'objet principal (en terme de méthodes accessibles). </para> <para> L'aggrégation d'object est une méthode naturelle pour représenter des relation de type tout-partie (par exemple, une molécule est une aggrégation d'atomes), ou bien peut être utilisée pour obtenir un effet équivalent à l'héritage multiple, sans avoir à lier plusieurs classes et leurs interfaces. En fait, les aggrégations d'objets sont plus souples, car nous pouvons alors sélectionner les méthodes et les propriétés qui sont transmises à l'objet aggrégé. </para> </section> <section id="objaggregation.examples"> &reftitle.examples; <para> Nous définissons trois classes, qui implémentent chacune une méthode de stockage différente : </para> <para> <example> <title>storage_classes.inc</title> <programlisting role="php"> <![CDATA[ <?php class FileStorage { var $data; function FileStorage($data) { $this->data = $data; } function write($name) { $fp = fopen(name, "w"); fwrite($fp, $this->data); fclose($data); } } class WDDXStorage { var $data; var $version = "1.0"; var $_id; // variable "privée" function WDDXStorage($data) { $this->data = $data; $this->_id = $this->_genID(); } function store() { if ($this->_id) { $pid = wddx_packet_start($this->_id); wddx_add_vars($pid, "this->data"); $packet = wddx_packet_end($pid); } else { $packet = wddx_serialize_value($this->data); } $dbh = dba_open("varstore", "w", "gdbm"); dba_insert(md5(uniqid("",true)), $packet, $dbh); dba_close($dbh); } // méthode privée function _genID() { return md5(uniqid(rand(),true)); } } class DBStorage { var $data; var $dbtype = "mysql"; function DBStorage($data) { $this->data = $data; } function save() { $dbh = mysql_connect(); mysql_select_db("storage", $dbh); $serdata = serialize($this->data); mysql_query("insert into vars ('$serdata',now())", $dbh); mysql_close($dbh); } } ?> ]]> </programlisting> </example> </para> <para> Puis, nous instantion quelques objets issue de ces classes, et nous réalisons des aggrégations et désaggrégations, tout en affichant quelques résultats : </para> <para> <example> <title>test_aggregation.php</title> <programlisting role="php"> <![CDATA[ <?php include "storageclasses.inc"; // quelques utilitaires function p_arr($arr) { foreach($arr as $k=>$v) $out[] = "\t$k => $v"; return implode("\n", $out); } function object_info($obj) { $out[] = "Classe : ".get_class($obj); foreach(get_object_vars($obj) as $var=>$val) if (is_array($val)) $out[] = "propriété : $var (array)\n".p_arr($val); else $out[] = "propriété : $var = $val"; foreach(get_class_methods($obj) as $method) $out[] = "méthode : $method"; return implode("\n", $out); } $data = array(M_PI, "kludge != cruft"); // créons quelques objets simples $fs = new FileStorage($data); $ws = new WDDXStorage($data); // affichons des informations sur ces objets echo "\$fs object\n"; echo object_info($fs)."\n"; echo "\n\$ws object\n"; echo object_info($ws)."\n"; // maintenant, quelques aggrégations echo "\nAggrégeons \$fs avec la classe WDDXStorage\n"; aggregate($fs, "WDDXStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; echo "\nAggrégeons le résultat avec la classe DBStorage \n"; aggregate($fs, "DBStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; echo "\nEt finalement, désaggrégeons WDDXStorage\n"; deaggregate($fs, "WDDXStorage"); echo "L'objet \$fs \n"; echo object_info($fs)."\n"; ?> ]]> </programlisting> </example> </para> <para> Etudions maintenant le résultat du script pour comprendre les effets secondaires et les limitations des aggrégations d'objets en PHP. D'abord, nous avons créé <varname>$fs</varname> et <varname>$ws</varname> et ils fournissent le bon résultat (suivant la définition de leur classe). Notez que dans le but de l'aggrégation d'objets, <emphasis>les éléments privés d'une classe ou d'un objet doivent commencer par un souligné ("_")</emphasis>, même si il n'y a pas de distinction réelle entre un objet privé et un objet public. </para> <para> <informalexample> <programlisting> <![CDATA[ L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft méthode : filestorage méthode : write L'objet $ws Classe : wddxstorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 propriété : _id = ID::9bb2b640764d4370eb04808af8b076a5 méthode : wddxstorage méthode : store méthode : _genid ]]> </programlisting> </informalexample> </para> <para> Nous aggrégeons alors <varname>$fs</varname> avec la classe <classname>WDDXStorage</classname>, et nous affichons les informations. Nous pouvons aussi vior que même si l'objet <varname>$fs</varname> est toujours du type <classname>FileStorage</classname>, il a maintenant la propriété <varname>$version</varname>, et la méthode <function>store</function>, qui sont définies dans <classname>WDDXStorage</classname>. Une chose importante à noter est que les éléments privés n'ont pas été aggrégés, même si ils sont présents dans l'objet <varname>$ws</varname>. Un autre absent est le constructeur de <classname>WDDXStorage</classname>, qu'il n'est pas logique d'aggréger. </para> <para> <informalexample> <programlisting> <![CDATA[ Aggrégeons \$fs avec la classe WDDXStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 méthode : filestorage méthode : write méthode : store ]]> </programlisting> </informalexample> </para> <para> Le processus d'aggrégation est cumulatif, ce qui fait que lorsque nous aggrégeons <varname>$fs</varname> avec la classe <classname>DBStorage</classname>, nous générons un objet qui peut utiliser n'importe laquelle des méthodes de stockage de ces classes. </para> <para> <informalexample> <programlisting> <![CDATA[ Aggrégeons le résultat avec la classe DBStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : version = 1.0 propriété : dbtype = mysql méthode : filestorage méthode : write méthode : store méthode : save ]]> </programlisting> </informalexample> </para> <para> Finalement, de la même façon que nous avons aggrégés les méthodes et propriétés dynamiquement, nous pouvons aussi les désaggrégéer. Si vous désaggrégeons la classe <classname>WDDXStorage</classname> de l'objet <varname>$fs</varname>, nous allons obtenir : </para> <para> <informalexample> <programlisting> <![CDATA[ Et finalement, désaggrégeons WDDXStorage L'objet $fs Classe : filestorage propriété : data (array) 0 => 3.1415926535898 1 => kludge != cruft propriété : dbtype = mysql méthode : filestorage méthode : write méthode : save ]]> </programlisting> </informalexample> </para> <para> Un point que nous n'avons pas mentionnéé ci-dessus et que l'aggrégation ne va pas écraser les méthodes ou propriétés déjà existantes dans l'objet principal. Par exemple, la classe <classname>FileStorage</classname> définit une propriété <varname>$data</varname>, et la classe <classname>WDDXStorage</classname> aussi. Mais cette dernière ne sera pas impliquée dans l'aggrégation. </para> </section> </partintro> &reference.objaggregation.functions; </reference> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-list.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-list.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods-by-list"> <refnamediv> <refname>aggregate_methods_by_list</refname> <refpurpose> Aggrège sélectivement les méthodes d'une classe grâce à une liste </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods_by_list</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> <methodparam><type>array</type><parameter>methods_list</parameter></methodparam> <methodparam choice='opt'><type>boolean</type><parameter>exclude</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods_by_list</function> aggrège les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, en filtrant les méthodes aggrégées grâce à la liste <parameter>methods_list</parameter>, appliquée au nom de la méthode. Le paramètre optionnel <parameter>exclude</parameter> sert à décider si l'expression régulière sélectionne les méthodes ( <parameter>exclude</parameter> vaut &false; sa valeur par défaut), ou bien si elle sert à identifier les méthodes qui doivent être exclues (<parameter>exclude</parameter> vaut &true;). </para> <para> Le constructeur de classe et les méthodes dont le nom commence par un caractère souligné ("_"), qui sont considérées comme privées, sont toujours exclues. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-regexp.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods-by-regexp.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods-by-regexp"> <refnamediv> <refname>aggregate_methods_by_regexp</refname> <refpurpose> Aggrège sélectivement les méthodes d'une classe grâce à une expression régulière </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods_by_regexp</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> <methodparam><type>string</type><parameter>regexp</parameter></methodparam> <methodparam choice='opt'><type>boolean</type><parameter>exclude</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods_by_regexp</function> aggrège les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, en filtrant les méthodes aggrégées grâce à l'expression régulière <parameter>regexp</parameter>, appliquée au nom de la méthode. Le paramètre optionnel <parameter>exclude</parameter> sert à décider si l'expression régulière sélectionne les méthodes ( <parameter>exclude</parameter> vaut &false; sa valeur par défaut), ou bien si elle sert à identifier les méthodes qui doivent être exclues (<parameter>exclude</parameter> vaut &true;). </para> <para> Le constructeur de classe et les méthodes dont le nom commence par un caractère souligné ("_"), qui sont considérées comme privées, sont toujours exclues. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-methods.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-methods.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-methods"> <refnamediv> <refname>aggregate_methods</refname> <refpurpose> Aggrège dynamiquement les méthodes d'une classe à un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_methods</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_methods</function> aggège toutes les méthodes de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, sauf les méthodes dont le nom commence par un souligné ("_"), qui sont considérées commes privées, et donc ignorées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_info</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate-properties.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate-properties.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate-properties"> <refnamediv> <refname>aggregate_properties</refname> <refpurpose> Aggrège dynamiquement les propriétés d'une classe à un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate_properties</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate_properties</function> aggège toutes les propriétés de la classe <parameter>class_name</parameter> avec l'objet <parameter>object</parameter>, sauf les propriétés dont le nom commence par un souligné ("_"), qui sont considérées commes privées, et donc ignorées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function>, <function>aggregate_info</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregate.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregate.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregate"> <refnamediv> <refname>aggregate</refname> <refpurpose> Aggrège dynamiquemetn des classes et objets </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>aggregate</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>aggregate</function> aggrège les méthodes et propriétés de la classe <parameter>class_name</parameter> dans l'objet <parameter>object</parameter>. Les méthodes et propriétés commençant par un souligné ("_") sont considérées comme privées et ignorées dans le processus d'aggrégation. Les constructeurs sont aussi exclus de l'aggrégation. </para> <simpara> Voir aussi <function>aggregate_info</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/aggregation-info.xml +++ phpdoc-fr/reference/objaggregation/functions/aggregation-info.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.aggregation-info"> <refnamediv> <refname>aggregation_info</refname> <refpurpose> Retourne un tableau associatif décrivant les classes aggrégées </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>array</type><methodname>aggregation_info</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> </methodsynopsis> <para> <function>aggregation_info</function> retourne les informations d'aggrégation pour l'objet <parameter>object</parameter>, sous la forme d'un tableau associatif. Les clés de ce tableau sont les noms des classes aggrégées. </para> <para> Par exemple, le code ci-dessous <example> <title>Exemple avec <function>aggregation_info</function></title> <programlisting role='php'> <![CDATA[ <?php class Slicer { var $vegetable; function Slicer($vegetable) { $this->vegetable = $vegetable; } function slice_it($num_cuts) { echo "Tranchage\n"; for ($i=0; $i < $num_cuts; $i++) { // un peu de tranchage some slicing } } } class Dicer { var $vegetable; var $rotation_angle = 90; // degrés function Dicer($vegetable) { $this->vegetable = $vegetable; } function dice_it($num_cuts) { echo "Coupe suivant une direction\n"; for ($i=0; $i < $num_cuts; $i++) { // tranchage } $this->rotate($this->rotation_angle); echo "Coupe suivant une autre direction\n"; for ($i=0; $i < $num_cuts; $i++) { // tranchage encoer } } function rotate($deg) { echo "Rotation de {$this->vegetable} {$deg} degrés\n"; } function _secret_super_dicing($num_cuts) { // secret industriel, a ne pas montrer. } } $obj = new Slicer('onion'); aggregate($obj, 'Dicer'); print_r(aggregate_info($obj)); ?> ]]> </programlisting> </example> </para> <para> va produire le résultat suivant <informalexample> <programlisting> <![CDATA[ Array ( [dicer] => Array ( [methods] => Array ( [0] => dice_it [1] => rotate ) [properties] => Array ( [0] => rotation_angle ) ) ) ]]> </programlisting> </informalexample> Comme vous pouvez le voir, toutes les méthodes et propriétés de <classname>Dicer</classname> ont été aggrégées dans notre nouvel objet, a l'excéption de la classe constructuer, et de la méthode <methodname>_secret_super_dicing</methodname> </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>deaggregate</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> Index: phpdoc-fr/reference/objaggregation/functions/deaggregate.xml +++ phpdoc-fr/reference/objaggregation/functions/deaggregate.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <refentry id="function.deaggregate"> <refnamediv> <refname>deaggregate</refname> <refpurpose> Desaggrège un objet </refpurpose> </refnamediv> <refsect1> <title>Description</title> <methodsynopsis> <type>void</type><methodname>object_aggregation</methodname> <methodparam><type>object</type><parameter>object</parameter></methodparam> <methodparam choice='opt'><type>string</type><parameter>class_name</parameter></methodparam> </methodsynopsis> <para> <function>object_aggregation</function> supprime les méthodes et propriétés de la classe <parameter>class_name</parameter>, qui ont été aggrégées dans l'objet <parameter>object</parameter>. Si le paramètre optionnel <parameter>class_name</parameter> est passé, seules les méthodes et propriétés de cette classe sont désaggrégées. Sinon, toutes les méthodes et propriétés aggrégées sont retirées. </para> <simpara> Voir aussi <function>aggregate</function>, <function>aggregate_methods</function>, <function>aggregate_methods_by_list</function>, <function>aggregate_methods_by_regexp</function>, <function>aggregate_properties</function>, <function>aggregate_properties_by_list</function>, <function>aggregate_properties_by_regexp</function> et <function>aggregate_info</function> </simpara> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->