dams Mon Feb 12 07:19:16 2001 EDT
Modified files:
/phpdoc/fr/appendices migration4.xml
Log:
Addind section id's.
Index: phpdoc/fr/appendices/migration4.xml
diff -u phpdoc/fr/appendices/migration4.xml:1.1 phpdoc/fr/appendices/migration4.xml:1.2
--- phpdoc/fr/appendices/migration4.xml:1.1 Tue Jan 23 02:29:47 2001
+++ phpdoc/fr/appendices/migration4.xml Mon Feb 12 07:19:15 2001
@@ -1,280 +1,291 @@
<appendix id="migration4">
<title>Migration de PHP 3.0 à PHP 4.0</title>
- <section>
- <title>What has changed in PHP 4.0</title>
+ <sect1 id="migration4.changes">
+ <title>Ce qui a chang� en PHP 4.0</title>
<para>
- PHP 4.0 and the integrated Zend engine have greatly inproved PHPs
- performance and capabilities, but great care has been taken to
- break as little existing code as possible. So migrating your code
- from PHP 3.0 to 4.0 should be much easier than migrating from
- PHP/FI 2.0 to PHP 3.0. A lot of existing PHP 3.0 code should be
- ready to run without changes, but you should still know about the
- few differences and take care to test your code before switching
- versions in production environments. The following should give you
- some hints about what to look for.
- </para>
- </section>
- <section>
- <title>Parser behavior</title>
- <para>
- Parsing and execution are now two completely seperated steps, no
- execution of a files code will happen until the complete file and
- everything it requires has completely and successfully been parsed.
- </para>
- <para>
- One of the new requirenments introduced with this split is that
- required and included files now have to be syntactically
- complete. You can no longer spread the different controling parts
- of a control structure across file boundaries. That is you cannot
- start a <literal>for</literal> or <literal>while</literal> loop,
- an <literal>if</literal> statement or a <literal>switch</literal>
- block in one file and have the end of loop,
+ PHP 4.0 et le moteur Zend ont significativement am�lior� les
+ performances et les possibilit�s de PHP, tout en assurant une
+ compatibilit� ascendante maximale. Le maximum de codes existants
+ sous PHP 3.0 fonctionneront sous PHP 4.0. La migration de votre
+ code de PHP 3.0 vers PHP 4.0 sera beaucoup plus facile que
+ celle de PHP/FI 2.0 vers 3.0. Un grand nombre de scripts seront
+ pr�ts sans modifications, mais il est bon que vous connaissiez
+ les quelques diff�rences, et que vous testiez vos applications
+ avant d'effecteur le changement de cadre de production. Les
+ indications suivantes vous mettront sur la voie.
+ </para>
+ </sect1>
+ <sect1 id="migration4.parser">
+ <title>Comportement de l'analyseur</title>
+ <para>
+ L'analyse et l'�xecution sont d�sormais deux �tapes compl�tement
+ dissoci�es, et l'�x�cution intervient lorsque le code, ainsi que
+ tous ses inclusions et pr�-requis, ont �t�
+ compl�tement analys� et valid�.
+ </para>
+ <para>
+ Une des nouvelles conditions introduites est que les fichiers
+ inclus et requis (<function>include</function> et
+ <function>require</function>) doivent �tre syntaxiquement
+ complets. Vous ne pouvez plus r�partir diff�rents cas de votre
+ code dans plusieurs fichiers. Vous ne pouvez plus commner une
+ boucle <literal>for</literal> ou <literal>while</literal>,
+ une condition <literal>if</literal> ou un cas <literal>switch</literal>
+ dans un fichier, et finir la boucle ou placer les cas
<literal>else</literal>, <literal>endif</literal>,
- <literal>case</literal> or <literal>break</literal> statements in a
different file.
+ <literal>case</literal> ou <literal>break</literal>
+ dans un autre fichier.
</para>
<para>
- It still perfectly legal to include additional code within loops
- or other control structures, only the controling keywords and
- corresponding curly braces <literal>{...}</literal> have to be
- within the same compile unit (file or <function>eval</function>ed
string).
- </para>
- <para>
- This should not harm to much as spreading code like this should be
- considered as very bad style anyway.
- </para>
- <para>
- Another thing no longer possible, though rarely seen in PHP 3.0
- code is returning values from a required file. Returning a value
- from an included file is still possible.
- </para>
- </section>
- <section>
- <title>Error reporting</title>
- <section>
- <title>Configuration changes</title>
- <para>
- With PHP 3.0 the error reporting level was set as a simple
- numeric value formed by summing up the numbers related to
- different error levels. Usual values where 15 for reporting all
- errors and warnings or 7 for reporting everything but simple
- notice messages reporting bad style and things like that.
- </para>
- <para>
- PHP 4.0 now has a greater set of different error and warning
- levels and comes with a configuration parser that now allows for
- symbolic constants to be used for setting up the intended behavior.
- </para>
- <para>
- Error reporting level should now be configured by explicitly
- taking away the warning levels you do not want to generate error
- messages by x-oring them from the symbolic constant E_ALL. Sounds
- complicated? Well, lets say you want the error reporting system
- to report all but the simple style warnings that are categorized
- by the symbolic constant E_NOTICE. Then you'll put the following
- into your <filename>php.ini</filename>:
- <literal>error_reporting = E_ALL & ~ ( E_NOTICE )</literal>.
- If you wan't to suppress warnings too you add up the appropriate
- constant within the braces using the binary or operator '|':
- <literal>error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING )</literal>.
+ Il est toujours valable d'inclure du code suppl�mentaire depuis
+ une boucle ou dans une conditions, mais les accolades de
+ bloc <literal>{...}</literal>, et les �l�ments de la boucle
+ doivent �tre dans le m�me fichier ou cha�ne �valu�e avec
+ <function>eval</function>.
+ </para>
+ <para>
+ Cela ne devrait pas perturber trop de monde, car �taler son
+ code de cette fa�on est plut�t un style � �viter.
+ </para>
+ <para>
+ Une autre nouveaut� est qu'il est plus possible de faire
+ retourner une valeur avec un fichier requis
+(<function>require</function>)
+ (mais c'est plut�t rare en PHP 3.0). Retourner une valeur
+ avec un fichier inclus (<function>require</function>) est toujours
+ possible.
+ </para>
+ </sect1>
+ <sect1 id="migration4.errors">
+ <title>Rapport d'erreur</title>
+ <sect2 id="migration4.error_reporting">
+ <title>Changement de configuration</title>
+ <para>
+ Avec PHP 3.0, le niveau de rapport d'erreur �tait obtenu en
+ ajoutant les constantes num�riques de chaque niveau de
+ rapport. G�n�ralement, on utilisait 15 pour afficher toutes
+ les erreurs, et 7 pour afficher toutes les erreurs hormis
+ les alertes simples.
+ </para>
+ <para>
+ PHP 4.0 dispose d'un nombre significativement plus grand de niveaux
+ de rapport d'erreur, et l'analyseur comprend d�sormais les
+ constantes, lors des modifications.
+ </para>
+ <para>
+ Le niveau de rapport d'erreur doit d�sormais �tre explicitement
+ configur� en supprimant les niveaux dont vous ne voulez pas
+ du niveau maximal, gr�ce � la fonction de OU exclusif. Ca a
+ l'air compliqu�? Supposons que vous souhaitiez afficher toutes les
+ erreurs, hormis les alertes de style, qui sont rep�r�es par
+ la constante : E_NOTICE. Il suffit d'ajouter la valeur
+ suivante dans le fichier <filename>php.ini</filename>:
+ <literal>error_reporting = E_ALL & ~ ( E_NOTICE )</literal>.
+ Si vous voulez supprimer en plus les alertes, vous pouvez
+ ajouter la constante appropri�e, en la combinant avec l'op�rateur
+ OU logique '|':
+ <literal>error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING )</literal>.
</para>
<warning>
<para>
- Using the old values 7 and 15 for setting up error reporting
is a
- very bad idea as this suppresses some of the newly added error
- classes including parese errors. This may leed to very strange
- behavior as scripts might no longer work without error messages
- showing up anywhere.
+ L'utilisation des vieilles valeurs de 7 et 15 est une tr�s
+ mauvaise id�e, car elles ne prennent pas en compte les
+ nouvelles classes d'erreurs, y compris certaines erreurs
+ d'analyse. Cela peut conduire � de tr�s �tranges r�sultats,
+ o� le script n'affiche plus rien, malgr� une erreur d'analyse.
</para>
<para>
- This has lead to a lot of unreproduceable bug reports in the
- past where people reported script engine problems they were not
- capable to track down while the TRUE case was usually some
- missing '}' in a required file that the parser was not able to
- report due to a misconfigured error reporting system.
+ Cela a conduit � un grand nombre de rapport d'erreur dans
+ le pass�, alors que les programmeurs n'�taient tout simplement
+ pas capable de rep�rer l'accolade manquante, car l'analyseur
+ avait la consigne de cacher ces erreurs.
</para>
<para>
- So checking your error reporting setup should be the first
thing
- to do whenever your scripts silently die. The Zend enginge can
- be considererd mature enough nowadays to not cause this kind of
- strange behavior.
+ V�rifier votre niveau d'erreur doit �tre le premier reflexe
+ lorsque vos scripts meurent silencieusement. Le moteur
+ Zend est consid�r� actuellement comme suffisament mature pour
+ ne plus causer ce genre de probl�me aujourd'hui.
</para>
</warning>
- </section>
- <section>
- <title>Additional warning messages</title>
- <para>
- A lot of existing PHP 3.0 code uses language constructs that
- should be considered as very bad style as this code, while doing
- the intended thing now, could easily be broken by changes in
- other places. PHP 4.0 will output a lot of notice messages in
- such situations where PHP 3.0 didn't.
- The easy fix is to just turn off E_NOTICE messages, but it is
- usually a good idea to fix the code instead.
- </para>
- <para>
- The most common case that will now produce notice messages is the
- use of unquoted string constants as array indices. Both PHP 3.0
- and 4.0 will fall back to interprete theese as strings if no
- keyword or constant is known by that name, but whenever a
- constant by that name had been defined anywhere else in the code
- it might break your script. This can even become a security risk
- if some intruder manages to redefine string constants in a way
- that makes your script give him access rights he wasn't intended
- to have. So PHP 4.0 will now warn you whenever you use unquoted
- string constants as for example in
- <literal>$HTTP_SERVER_VARS[REQUEST_METHOD]</literal>. Changing it
- to <literal>$HTTP_SERVER_VARS['REQUEST_METHOD']</literal> will
- make the parser happy and greatly improve the style and security
- of your code.
- </para>
- <para>
- Another thing PHP 4.0 will now tell you about is the use of
- uninitialized variables or array elements.
- </para>
- </section>
- </section>
- <section>
- <title>Initializers</title>
- <para>
- Static variable and class member initializers only accept scalar
- values while in PHP 3.0 they accepted any valid expression.
- This is, once again, due to the split between parsing and
- execution as no code has yet been executed when the parser sees
- the initializer.
- </para>
- <para>
- For classes you should use constructors to initialize member
- variables instead. For static variables anything but a simple
- static value rarely makes sense anyway.
+ </sect2>
+ <sect2 id="migration4.messages">
+ <title>Nouveaux messages d'erreurs</title>
+ <para>
+ Un grand nombre de scripts PHP PHP 3.0 utilisent des structures qui
+ doivent �tre consid�r�es comme un tr�s mauvais style, m�me s'il
+ effectue bien la t�che qui lui est affect�e, car ils ne sont pas
+ robustes. PHP 4.0 affichera de nombreux messages d'erreurs dans
+ des situations o� PHP 3.0 restera coi.
+ La solution de facilit� consiste � supprimer les messages de
+ niveau E_NOTICE, mais c'est une meilleure id�e de corriger le
+ code � la place.
+ </para>
+ <para>
+ Le cas le plus courant qui g�n�rera des messages d'alertes
+ est l'utilisation de constantes sans guillemets comme
+ index de tableaux. PHP 3.0, comme PHP 4.0, finiront par les
+ interpr�ter literalement comme des cha�nes, si aucune constante
+ n'est d�finie � la place. Mais si jamais une telle constante
+ est d�finie dans une autre partie du code, cela risque de
+ produire des r�sultats �tonnants. Cela peut devenir un trou
+ de s�curit� si un pirate arrive � red�finir les constantes
+ de telle mani�re que le script lui donne acc�s � un niveau
+ de droits sup�rieur. PHP 4.0 vous signalera tout oubli de
+ guillemets comme par exemple dans :
+ <literal>$HTTP_SERVER_VARS[REQUEST_METHOD]</literal>. Modifier
+ ce code e, <literal>$HTTP_SERVER_VARS['REQUEST_METHOD']</literal>
+ rendra l'analyseur heureux, et am�liorera grandement votre
+ style et la s�curit� du code.
+ </para>
+ <para>
+ PHP 4.0 vous signalera les variables ou les
+ �l�ments de tableaux non initialis�s.
+ </para>
+ </sect2>
+ </sect1>
+ <sect1 id="migration4.initializers">
+ <title>Initialiseur</title>
+ <para>
+ Les variables statiques et les membres de classes n'acceptent
+ plus que des initialiseurs scalaires, tandis que PHP 3.0 acceptait
+ aussi les expressions. Cela est d�, encore une fois, � la
+ s�paration de l'analyse et de l'ex�cution : aucun code
+ ne peut �tre ex�cut� tant que l'analye n'est pas termin�e.
+ </para>
+ <para>
+ Pour les classes, il vaut mieux initialiser les membres dans
+ le constructeur. Pour les variables static, une valeur fixe
+ et simple est la seule chose qui viennent � l'esprit.
</para>
- </section>
- <section>
+ </sect1>
+ <sect1 id="migration4.empty">
<title><literal>empty("0")</literal></title>
<para>
- The perhaps most cotroversal change in behavior has happend to the
- behavior of the <function>empty</function>. A String containing
- only the character '0' (zero) is now considered empty while it
- wasn't in PHP 3.0.
+ L'�volution la plus pol�mique est celle de <function>empty</function>.
+ Une cha�ne contenant seulement le caract�re
+ <literal>'0'</literal> (z�ro) est maintenant consid�r�e comme
+ vide, alors qu'elle ne l'�tait pas en PHP 3.0.
</para>
<para>
- This new behavior makes sense in web applications, with all input
- fields returning strings even if numeric input is requested, and
- with PHP's capabilities of automatic type conversion.
- But on the other had it might break your code in a rather subtele
- was, leading to misbehavior that is hard to track down if you
- do not know about what to look for.
- </para>
- </section>
- <section>
- <title>Missing functions</title>
- <para>
- While PHP 4.0 comes with a lot of new features, functions and
- extensions, you may still find some functions from version 3.0
- missing. A small number of core functions has vanished because
- they do not work with the new scheme of splitting parsing and
- execution as introduced into 4.0 with the Zend engine.
- Other functions and even complete extensions have become obsolete
- as newer functions and extensions serve the same task better
- and/or in a more general way. Some functions just simply haven't
- been ported yet and finally some functions or extensions may be
- missing due to license conflicts.
- </para>
- <section>
- <title>Functions missing due to conceptual changes</title>
- <para>
- As PHP 4.0 now seperates parsing from execution it is no longer
- possible to change the behavior of the parser (now embedded in
- the Zend engine) at runtime as parsing al already happend by
- then. So the function <function>short_tags</function> has ceased
- to exist. You can still change the parsers behavior by setting
- appropriate values in the <filename>php.ini</filename> file.
- </para>
- <para>
- Another feature from PHP 3.0 that didn't make it into 4.0 is the
- experimental debugging interface as described in ??? in this
- manual.
- A seperate TRUE debuger is promissed to be released as a Zend
- product but hasn't become visible yet.
- </para>
- </section>
- <section>
- <title>Deprecate functions and extensions</title>
- <para>
- The Adabas and Solid database extensions are no more. Long live
- the unified ODBC extension instead.
- </para>
- </section>
- <section>
- <title>Changed status for <function>unset</function></title>
- <para>
- <function>unset</function>, although still available, is
- implemented a literal different in PHP 4.0 so that it no longer
- counts as a 'real' function.
- </para>
- <para>
- This has no direct consequences as
- the behavior of <function>unset</function> didn't change, but
- testing for "unset" usign <function>function_exists</function>
- will return <literal>false</literal> as it would with othern
- lowlevel functions like <function>echo</function>.
- </para>
- <para>
- Another more practical change is that it is no longer possible to
- call <function>unset</function> indirectly, that is
- <literal>$func="unset"; $func($somevar)</literal> won't work anymore.
- </para>
- </section>
- </section>
- <section>
- <title>PHP 3.0 extension</title>
- <para>
- Extensions written for PHP 3.0 will not work with PHP 4.0
- anymore, neither as binaries nor at the source level. It is not to
- difficult to port your extensions to PHP 4.0 if you have access to
- the origibal sources. A detailed description of the actual
- porting process is not part of this text (yet).
- </para>
- </section>
- <section>
- <title>Variable substitution in strings</title>
- <para>
- PHP 4.0 adds a new mechanism to variable substitution in
- strings. You can now finally access object member variables and
- elements from multidimensional arrays within strings.
- </para>
- <para>
- To do so you have to enclose your variables with curly braces
- with the dollar sign immediately following the opening brace:
- <literal>{$...}</literal>
- </para>
- <para>
- To embed the value of an object member variable into a string you
- simply write <literal>"text {$obj->member} text"</literal> while
- in PHP 3.0 you had to use something like <literal>"text
- ".$obj->member." text"</literal>.
- </para>
- <para>
- This should lead to more readable code, while it may break existing
- scripts written for PHP 3.0. But ou can easily check for this kind of
- problem by checking for the character combination
- <literal>{$</literal> in your code and by replacing it with
- <literal>\{$</literal> with your favourite search-and-replace tool.
+ Ce nouveau comportement prend tout son send dans les applications
+ web, puisque tous les r�sultats de champs de type input est une
+ cha�ne, m�me si un nombre est demand�, et gr�ce aux capacit�s
+ de conversion automatique de PHP. D'un autre cot�, cela peut
+ casser votre code d'une mani�re tr�s subtile, menant droit au
+ comportement erratique, difficilement rep�rable si vous ne
+ savez pas ce qui vous attend.
+ </para>
+ </sect1>
+ <sect1 id="migration4.missing">
+ <title>Fonctions manquantes</title>
+ <para>
+ Bien que PHP 4.0 dispose de nombreuses nouvelles fonctionnalit�s
+ fonctions et extensions, vous vous rencontrer des fonctions PHP
+ 3.0 qui manquent. Un petit nombre de fonctions de base n'ont pu
+ �tre port�es en PHP 4.0, maintenant que l'analyse et l'�x�cution
+ ont �t� s�par�es. D'autres fonctions, et m�mes des extensions
+ enti�res sont maintenant obsol�tes, remplac�es par de nouvelles
+ fonctions plus puissantes ou plus efficaces. Certaines fonctions
+ n'ont tout simplement pas �t� port�es pour le moment ou pour
+ des raisons de licences.
+ </para>
+ <sect2 id="migration4.impossible">
+ <title>Fonctions manquantes pour des raisons de structure</title>
+ <para>
+ Comme PHP 4.0 s�pare l'analyse et l'�x�cution, il n'est plus
+ possible de modifier le comportement de l'analyseur (int�gr�
+ dans le moteur Zend) durant l'�x�cution, puisque toute
+ l'analyse a eu lieu, et est termin�e. La fonction
+ <function>short_tags</function> a cess� d'�xister. Vous pouvez
+ toujours modifier le comportement de l'analyseur avec
+ le fichier <filename>php.ini</filename>.
+ </para>
+ <para>
+ Une autre fonctionnalit� qui a disparu est le d�buggeur
+ de PHP 3.0, comme d�crit dans un autre appendice. Un nouveau
+ d�buggeur est promis par Zend, mais il n'a pas encore montr�
+ le bout de son nez.
+ </para>
+ </sect2>
+ <sect2 id="migration4.deprecated">
+ <title>Fonctions et extensions obsol�tes</title>
+ <para>
+ Les extensions Adabas et Solid n'existent plus. Elle sont int�gr�es
+ dans les fonctions ODBC Unifi�.
+ </para>
+ </sect2>
+ <sect2 id="migration4.unset">
+ <title>Nouveau statut pour <function>unset</function></title>
+ <para>
+ <function>unset</function>, bient que toujours disponible, a �t�
+ impl�ment� l�g�rement diff�remment en PHP 4.0, et elle n'est
+ plus vraiment une 'fonction'.
+ </para>
+ <para>
+ Cela n'a pas de cons�quence directe sur le comportement de
+ <function>unset</function>, mais utiliser cette fonction
+ pour faire un test avec <function>function_exists</function>
+ retournera <literal>FALSE</literal> comme il se doit avec
+ les fonction bas niveau comme <function>echo</function>.
+ </para>
+ <para>
+ Une autre application pratique disparue est qu'il n'est plus possible
+ d'appeler <function>unset</function> indirectement, c'est � dire que
+ <literal>$func="unset"; $func($somevar)</literal> ne fonctionne plus.
+ </para>
+ </sect2>
+ </sect1>
+ <sect1 id="migration4.extension">
+ <title>Extensions PHP 3.0</title>
+ <para>
+ Les extensions �crites pour PHP 3.0 ne fonctionnent plus avec PHP 4.0,
+ ni les ex�cutables, ni les codes sources. Il n'est pas difficile de
+ porter les extensions de PHP 3.0 � 4.0 si vous avez acc�s aux
+ sources originales. Une description d�taill�e du processus
+ de portage ne fait pas partie de cet appendice (pour le moment).
+ </para>
+ </sect1>
+ <sect1 id="migration4.substitution">
+ <title>Substitution de variables dans les cha�nes</title>
+ <para>
+ PHP 4.0 dispose d'un nouveau m�canisme de substitution des
+ variables dans les cha�nes. Vous pouvez d�sormais acc�der aux
+ membres d'objets et aux tableaux multidimensionnels dans une
+ cha�ne.
+ </para>
+ <para>
+ Pour cela, il suffit de placer la variables entre accolades, le signe
+ $ suivant imm�diatement la premi�re accolade :
+ <literal>{$variable['a']}</literal>
+ </para>
+ <para>
+ Pour utiliser la valeur d'un membre d'objet dans une cha�ne,
+ il suffit d'�crire : <literal>"text {$obj->member} text"</literal>;
+ alors qu'en PHP 3.0, il fallait faire comme ceci :
+ <literal>"texte".$objet->membre." texte"</literal>.
+ </para>
+ <para>
+ Cette technique rend le code beaucoup plus lisible, mais risque de
+ poser des probl�mes dans certains scripts PHP 3.0. Vous pouvez
+ facilement traquer ce probl�me en recherche les s�quences
+ <literal>{$</literal> dans votre code, et en les remplacant par
+ <literal>\{$</literal> avec votre outil de remplacement habituel.
</para>
- </section>
- <section>
+ </sect1>
+ <sect1 id="migration4.cookies">
<title>Cookies</title>
<para>
- PHP 3.0 hat the bad habbit of setting cookies in the reverse order
- of the <function>setcookie</function> calls in your code. PHP 4.0
- breaks with this habbit and creates the cookie header lines in
- exactly the same order as you set the cookies in the code.
+ PHP 3.0 avait la mauvaise habitude d'envoyer les cookies dans l'ordre
+ inverse de celui du code (l'orde des appels �
+ <function>setcookie</function>). PHP 4.0 r�tablit l'ordre naturel
+ en les envoyant dans le m�me ordre que vous m�mes.
</para>
<para>
- This might break some existing code, but the old behaviour was so
- strange to understand that it deserved a change to prevent further
- problems in the future.
+ Cela peut aussi prendre � contre-pied certains programmes, mais
+ ce comportement �tait tellement �trange qu'il m�ritait un tel
+ traitement un jour ou l'autre, pour �viter d'autres
+ probl�mes ult�rieurs.
</para>
- </section>
+ </sect1>
</appendix>
<!-- Keep this comment at the end of the file
Local variables: