Files
doc-fr/reference/classobj/reference.xml
T
Hartmut Holzgraefe b8daeaab85 banana-split
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@78204 c90b9560-bf6c-de11-be94-00142212c4b1
2002-04-15 00:40:38 +00:00

159 lines
4.8 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.1 $ -->
<reference id="ref.classobj">
<title>Objets</title>
<titleabbrev>Classes et Objets</titleabbrev>
<partintro>
<section id="classobj.partintro">
<title>Introduction</title>
<section id="classobj.intro">
<title>About</title>
<para>
Ces fonctions permettent de g&eacute;rer les classes et les objets.
Vous pouvez notamment conna&icirc;tre le nom de la classe d'un
objet, ses membres et ses m&eacute;thodes, et tous les objets
parents (les classes qui sont &eacute;tendues par la classe d'un objet).
</para>
</section>
<section id="classobj.example">
<title>Exemple d'utilisation</title>
<para>
Dans cet exemple, on d&eacute;finit une classe de base, et une
extension. La classe de base d&eacute;finit un l&eacute;gume, s'il est
mangeable ou pas, et sa couleur. La sous-classe
<varname>epinard</varname> ajoute une m&eacute;thode pour le cuisiner,
et une autre pour savoir s'il est cuisin&eacute;.
</para>
<para>
<example>
<title>classes.inc</title>
<programlisting role="php">
&lt;?php
// classe de base, avec ses membres et ses m&eacute;thodes
class Legume {
var $mangeable;
var $couleur;
function legume( $mangeable, $couleur=&quot;green&quot; ) {
$this-&gt;mangeable = $mangeable;
$this-&gt;couleur = $couleur;
}
function est_mangeable() {
return $this-&gt;mangeable;
}
function quelle_couleur() {
return $this-&gt;couleur;
}
} // fin de la classe Legume
// extend la classe de base
class Epinard extends Legume {
var $cuit = <literal>FALSE</literal>;
function Epinard() {
$this-&gt;Legume( <literal>TRUE</literal>, &quot;green&quot; );
}
function cuisine() {
$this-&gt;cuit = <literal>TRUE</literal>;
}
function est_cuit() {
return $this-&gt;cuit;
}
} // fin de la classe Epinard
?&gt;
</programlisting>
</example>
</para>
<para>
Lorsqu'on instantie deux objets de ces classes, et qu'on affiche
leurs informations, on affiche aussi leur h&eacute;ritage. On d&eacute;finit ici
des utilitaires qui servent essentiellement &agrave; afficher ces
informations proprement.
</para>
<para>
<example>
<title>test_script.php</title>
<programlisting role="php">
&lt;pre&gt;
&lt;?php
include &quot;classes.inc&quot;;
// utilitaires
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo &quot;\t$prop = $val\n&quot;;
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo &quot;\tfunction $method()\n&quot;;
}
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo &quot;L'objet $obj belongs to class &quot;.get_class($$obj);
echo &quot; est une sous-classe de $class\n&quot;;
} else {
echo &quot;L'objet $obj n'est pas une sous classe $class\n&quot;;
}
}
// instantie 2 objets
$legume = new Legume(TRUE,&quot;blue&quot;);
$feuilles = new Epinard();
// affiche les informations sur ces objets
echo &quot;legume: CLASS &quot;.get_class($legume).&quot;\n&quot;;
echo &quot;feuilles: CLASS &quot;.get_class($feuilles);
echo &quot;, PARENT &quot;.get_parent_class($feuilles).&quot;\n&quot;;
// affiche les propri&eacute;t&eacute;s du l&eacute;gume
echo &quot;\nl&eacute;gume: Propri&eacute;t&eacute;s \n&quot;;
print_vars($legume);
// et les m&eacute;thodes de "feuilles"
echo &quot;\nfeuilles: Methods\n&quot;;
print_methods($feuilles);
echo &quot;\nParent&eacute;e:\n&quot;;
class_parentage(&quot;feuilles&quot;, &quot;Epinard&quot;);
class_parentage(&quot;feuilles&quot;, &quot;Legume&quot;);
?&gt;
&lt;/pre&gt;
</programlisting>
</example>
</para>
<para>
Il est important de noter que dans les exemples ci-dessus, les objets
<varname>$feuilles</varname> sont une instance de
<classname>Epinard</classname> qui est une sous-classe de
<classname>Legume</classname>, donc la derni&egrave;re partie du script
va afficher :
</para>
<para>
<informalexample>
<screen>
[...]
Parent&eacute;e:
L'objet feuilles n'est pas une sous classe Spinach
L'objet feuilles est une sous-classe de Legume
</screen>
</informalexample>
</para>
</section>
</section>
</partintro>
&reference.classobj.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:
-->