From 936c2600251563c076a1037999a1c06009faa1a6 Mon Sep 17 00:00:00 2001
From: Egon Schmid <eschmid@php.net>
Date: Tue, 23 Jan 2001 11:00:10 +0000
Subject: [PATCH] Now it is correct indented with sgml-indent-step 1.

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@40034 c90b9560-bf6c-de11-be94-00142212c4b1
---
 appendices/migration4.xml | 565 +++++++++++++++++++-------------------
 1 file changed, 283 insertions(+), 282 deletions(-)

diff --git a/appendices/migration4.xml b/appendices/migration4.xml
index 47a354f9fb..bf13aac6fa 100644
--- a/appendices/migration4.xml
+++ b/appendices/migration4.xml
@@ -1,301 +1,302 @@
  <appendix id="migration4">
-	<title>Migrating from PHP 3.0 to PHP 4.0</title>
+  <title>Migrating from PHP 3.0 to PHP 4.0</title>
 	
-	<section>
-	 <title>What has changed in 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>What has changed in 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,
+    <literal>else</literal>, <literal>endif</literal>,
+    <literal>case</literal> or <literal>break</literal> statements in
+    a different file.
+   </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>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,
-		<literal>else</literal>, <literal>endif</literal>,
-		<literal>case</literal> or <literal>break</literal> statements in a different file. 
-	 </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>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 
-		 <literal>E_ALL</literal>. 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 <literal>E_NOTICE</literal>. 
-		 Then you'll put the following into your <filename>php.ini</filename>: 
-         <literal>error_reporting = E_ALL & ~ ( E_NOTICE )</literal>. 
-         If you want 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>.
-		</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 lead to very strange
-			behavior as scripts might no longer work without error messages
-			showing up anywhere.
-		 </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.
-		 </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.
-		 </para>
-		</warning>
-	 </section>
+   <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
+     <literal>E_ALL</literal>. 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
+     <literal>E_NOTICE</literal>.  Then you'll put the following into
+     your <filename>php.ini</filename>: <literal>error_reporting =
+     E_ALL & ~ ( E_NOTICE )</literal>.  If you want 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>.
+    </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 lead to very strange
+      behavior as scripts might no longer work without error messages
+      showing up anywhere.
+     </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.
+     </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.
+     </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>
+    <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>
+  <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.
+   </para>
+  </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.
-	 </para>
-	</section>
-
-
-	<section>
-	 <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.
-	 </para>
+  <section>
+   <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.
+   </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>
+    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>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 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>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 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>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>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 original 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 you 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.
-	 </para>
-	</section>
-
-
-	<section>
-	 <title>Cookies</title>
-	 <para>
-		PHP 3.0 hat the bad habit 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.
-	 </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. 
-	 </para>
-	</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 original 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 you 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.
+   </para>
+  </section>
 
+  <section>
+   <title>Cookies</title>
+   <para>
+    PHP 3.0 hat the bad habit 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.
+   </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.
+   </para>
+  </section>
 
  </appendix>