[prev in list] [next in list] [prev in thread] [next in thread] 

List:       phpdoc
Subject:    [PHP-DOC] cvs: phpdoc / manual.xml.in  /en/appendices migration52.xml
From:       "Philip Olson" <philip () php ! net>
Date:       2007-02-28 6:09:22
Message-ID: cvsphilip1172642962 () cvsserver
[Download RAW message or body]

This is a MIME encoded message


philip		Wed Feb 28 06:09:22 2007 UTC

  Added files:                 
    /phpdoc/en/appendices	migration52.xml 

  Modified files:              
    /phpdoc	manual.xml.in 
  Log:
  Added Migration info for PHP 5.1.x to PHP 5.2.x. This closes bug #40519 
  and was created by Daniel Convissor with only minor modifications by me. 
  This file is based off of http://php.net/UPDATE_5_2.txt
  
  
["philip-20070228060922.txt" (text/plain)]

http://cvs.php.net/viewvc.cgi/phpdoc/manual.xml.in?r1=1.216&r2=1.217&diff_format=u
Index: phpdoc/manual.xml.in
diff -u phpdoc/manual.xml.in:1.216 phpdoc/manual.xml.in:1.217
--- phpdoc/manual.xml.in:1.216	Sat Feb 24 22:59:43 2007
+++ phpdoc/manual.xml.in	Wed Feb 28 06:09:22 2007
@@ -2,7 +2,7 @@
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 "@srcdir@/docbook/docbook-xml/docbookx.dtd" [
 
-<!-- $Revision: 1.216 $ -->
+<!-- $Revision: 1.217 $ -->
 
 <!-- Add translated specific definitions and snippets -->
 <!ENTITY % language-defs     SYSTEM "@srcdir@/@LANGDIR@/language-defs.ent">
@@ -156,6 +156,7 @@
  <part id="appendices">
   <title>&Appendices;</title>
   &appendices.history;
+  &appendices.migration52;
   &appendices.migration5;
   &appendices.migration4;
   &appendices.migration;

http://cvs.php.net/viewvc.cgi/phpdoc/en/appendices/migration52.xml?view=markup&rev=1.1
                
Index: phpdoc/en/appendices/migration52.xml
+++ phpdoc/en/appendices/migration52.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.1 $ -->
<appendix id="migration52">
 <title>Migrating from PHP 5.1.x to PHP 5.2.x</title>

 <section id="migration52.changes">
  <title>What has changed in PHP 5.2.x</title>
  <para>
   Most improvements in PHP 5.2.x have no impact on existing code.  There are
   a <link linkend="migration52.incompatible">few incompatibilities</link>
   and <link linkend="migration52.error-messages">new error messages</link>
   that should be considered, and code should be tested before switching PHP
   versions in production environments.
  </para>
  <para>
   If the system is being upgraded from PHP 5.0.x, the text titled 
   <ulink url="&url.php.upgrade51;">Upgrade Notes for PHP 5.1.x</ulink>
   should also be read.
  </para>
  <para>
   Similarly, if the system is being upgraded from PHP 4, the manual section
   titled <link linkend="migration5">Migrating from PHP 4 to PHP 5</link>
   should be read as well.
  </para>
 </section>

 <section id="migration52.incompatible">
  <title>Backward Incompatible Changes</title>
  <para>
   Although most existing PHP 5 code should work without changes, you should
   pay attention to the following backward incompatible changes:
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>getrusage</function> returns &null; when passed
     incompatible arguments as of PHP 5.2.1.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.ziparchive-setCommentName"><function>ZipArchive::setCommentName</function></link>
  returns &true; on success as of PHP 5.2.1.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.ziparchive-setcommentindex"><function>ZipArchive::setCommentIndex</function></link>
  returns &true; on success as of PHP 5.2.1.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>SplFileObject::getFilename</function> returns
     the filename, not relative/path/to/file, as of PHP 5.2.1.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     Changed priority of <constant>PHPRC</constant> environment variable on Win32
    </simpara>
    <simpara>
     The PHPRC environment variable now takes priority over the path stored
     in the Windows registry.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     CLI SAPI no longer checks cwd for &php.ini; or the \
<filename>php-cli.ini</filename> file  </simpara>
    <simpara>
     In PHP 5.1.x an undocumented feature was added that made the CLI binary check
     the current working directory for a PHP configuration file, potentially
     leading to unpredictable behavior if an unexpected configuration file were
     read. This functionality was removed in 5.2.0, and PHP will no longer search
     CWD for the presence of &php.ini; or <filename>php-cli.ini</filename> files.
     See also the <link linkend="features.commandline">command line</link> section
     of the manual.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     Added a warning when performing modulus 0 operations
    </simpara>
    <simpara>
     In earlier versions of PHP, performing integer % 0 did not emit any
     warning messages, instead returning an unexpected return value of &false;.
     As of PHP 5.2.0, this operation will emit an <constant>E_WARNING</constant>, 
     as is the case in all other instances where division by zero is performed.
    </simpara>
    <informalexample>
     <programlisting role="php">
<![CDATA[
<?php
print 10 % 0;
/* Warning:  Division by zero in filename on line n */
?>
]]>
     </programlisting>
    </informalexample>
   </listitem>
   <listitem>
    <simpara>
     Changed <function>__toString</function> to be called wherever
     applicable.
    </simpara>
    <simpara>
     The magic method <function>__toString</function> will now be called
     in a string context, that is, anywhere an object is used as a
     string.
    </simpara>
    <simpara>
     The fallback of returning a string that contains the
     object identifier was dropped in PHP 5.2.0.  It became
     problematic because an object identifier cannot be considered
     unique. This change will mean that your application is flawed if you
     have relied on the object identifier as a return value.  An attempt
     to use that value as a string will now result in a catchable fatal
     error.
    </simpara>
    <informalexample>
     <programlisting role="php">
<![CDATA[
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error:  Object of class foo could
   not be converted to string in filename on line n */
?>
]]>
     </programlisting>
    </informalexample>
    <simpara>
     Even with <function>__toString</function>, objects cannot be used as
     array indices or keys. We may add built-in hash support for this at
     a later date, but as of PHP 5.2.x you will need to either provide your
     own hashing or use the new SPL function
     <function>spl_object_hash</function>.
    </simpara>
    <simpara>
     Exceptions can not be thrown from from
     <function>__toString</function> methods.
    </simpara>
    <informalexample>
     <programlisting role="php">
<![CDATA[
<?php
class foo {
    public function __toString() {
        throw new Exception;
    }
}

try {
    print new foo;
    /* Fatal error:  Method foo::__toString() must
       not throw an exception in filename on line n */
} catch(Exception $e) {}
?>
]]>
     </programlisting>
    </informalexample>
   </listitem>
   <listitem>
    <simpara>
     Dropped abstract static class functions.
    </simpara>
    <simpara>
     Due to an oversight, PHP 5.0.x and 5.1.x allowed abstract static 
     functions in classes. As of PHP 5.2.x, only interfaces can have them.
    </simpara>
    <informalexample>
     <programlisting role="php">
<![CDATA[
<?php
abstract class foo {
    abstract static function bar();
    /* Strict Standards:  Static function foo::bar()
       should not be abstract in filename on line n */
}
?>
]]>
     </programlisting>
    </informalexample>
   </listitem>
   <listitem>
    <simpara>
     Added RFC2397 (<literal>data:</literal> stream) support.
    </simpara>
    <simpara>
     The introduction of the 'data' URL scheme has the potential to lead to a
     change of behavior under Windows. If you are working with a \
                <acronym>NTFS</acronym>
     file system and making use of meta streams in your application, and if you
     just happen to be using a file with the name 'data:' that is accessed without
     any path information - it won't work any more. The fix is to use the 'file:'
     protocol when accessing it.
    </simpara>
    <simpara>
     See also <ulink url="&url.rfc;2397">RFC 2397</ulink> 
    </simpara>
    <informalexample>
     <programlisting role="php">
<![CDATA[
<?php
/* when allow_url_include is OFF (default) */
include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
/* Warning:  include(): URL file-access is disabled
   in the server configuration in filename on line n */
?>
]]>
     </programlisting>
    </informalexample>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.error-messages">
  <title>New Error Messages</title>
  <para>
   Below are the new error messages that have not been discussed 
   elsewhere in this document.
  </para>
  <para>
   <example>
    <title>In PHP Core</title>
    <programlisting role="php">
<![CDATA[
<?php
echo " ";
session_regenerate_id();
/*  Warning:  session_regenerate_id(): Cannot regenerate
    session id - headers already sent in filename on line n */

str_word_count("string", 4);
/* Warning:  str_word_count(): Invalid format value 4
   in filename on line n */

strripos("foo", "f", 4);
/* Notice:  strripos(): Offset is greater than the
   length of haystack string in filename on line n */

strrpos("foo", "f", 4);
/* Notice:  strrpos(): Offset is greater than the
   length of haystack string in filename on line n */

/* As of PHP 5.2.1, when allow_url_include is OFF (default) */
include "php://input";
/* Warning:  include(): URL file-access is disabled
   in the server configuration in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title><link linkend="language.oop5">Object Oriented Code</link> in PHP \
Core</title>  <programlisting role="php">
<![CDATA[
<?php
interface foo {
}
class bar implements foo, foo {
}
/* Fatal error: Class bar cannot implement previously
   implemented interface foo in filename on line n */


class foo {
    public $bar;
    function __get($var)
    {
        return $this->bar;
    }
}

$foo = new foo;
$bar =& $foo->prop;
/* Notice: Indirect modification of overloaded property
   foo::$prop has no effect in filename on line n */


class foo implements iterator {
    public function current() {
    }
    public function next() {
    }
    public function key() {
    }
    public function valid() {
    }
    public function rewind() {
    }
}

$foo = new foo();
foreach($foo as &$ref) {}
/* Fatal error: An iterator cannot be used with foreach
   by reference in filename on line n */


class foo {
    private function __construct() {
    }
}
class bar extends foo {
    public function __construct() {
        parent::__construct();
        /* Fatal error:  Cannot call private
           foo::__construct() in filename on line n */
    }
}
new bar;


stream_filter_register("", "class");
/* Warning:  stream_filter_register(): Filter name
   cannot be empty in filename on line n */


stream_filter_register("filter", "");
/* Warning:  stream_filter_register(): Class name
   cannot be empty in filename on line n */
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.bzip2">bzip2</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
bzopen("", "w");
/* Warning:  bzopen(): filename cannot be empty
   in filename on line n */

bzopen("foo", "a");
/* Warning:  bzopen(): 'a' is not a valid mode for
   bzopen(). Only 'w' and 'r' are supported in
   filename on line n */

$fp = fopen("foo", "w");
bzopen($fp, "r");
/* Warning:  bzopen(): cannot read from a stream
   opened in write only mode in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.datetime">datetime</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
strtotime("today", "now");
/* Warning:  strtotime() expects parameter 2 to be
   long, string given in filename on line n */

/* As of PHP 5.2.1 */
new DateTime(new stdclass);
/* Fatal error: Uncaught exception 'Exception' with
   message 'DateTime::__construct() expects parameter
   1 to be string, object given' in filename:n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.dbase">dBase</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
dbase_open("foo", -1);
/* Warning: Invalid access mode -1 in filename on line n */

/* As of PHP 5.2.1 */
dbase_open("foo", null);
/* Warning: The filename cannot be empty in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.mcrypt">mcrypt</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
$key = "this is a secret key";
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td),
                        MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, "");
/* Warning: mcrypt_generic(): An empty string was
   passed in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.oci8">oci8</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
oci_connect("user", "pass", "db", "bogus_charset");
/* Warning: Invalid character set name:
   bogus_charset in filename on line n */

$oci = oci_connect("user", "pass", "db");
oci_password_change($oci, "", "old", "new");
/* Warning: username cannot be empty in filename
   on line n */

oci_password_change($oci, "user", "", "new");
/* Warning: old password cannot be empty in filename
   on line n */

oci_password_change($oci, "user", "old", "");
/* Warning: new password cannot be empty in filename
   on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.spl">SPL</link> Extension</title>
    <programlisting role="php">
<![CDATA[
<?php
$obj = new SplFileObject(__FILE__);
$obj->fgetcsv("foo");
/* Warning:  SplFileObject::fgetcsv(): delimiter must
   be a character in filename on line n */

$obj->fgetcsv(",", "foo");
/* Warning:  SplFileObject::fgetcsv(): enclosure must
   be a character in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>In the <link linkend="ref.sem">Semaphore</link> (sysvmsg) \
extension</title>  <programlisting role="php">
<![CDATA[
<?php
/* Warning:  maximum size of the message has to be
   greater then zero in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>A 5.2.1+ <link linkend="ref.zip">Zip</link> Example</title>
    <programlisting role="php">
<![CDATA[
<?php
$obj = new ZipArchive();
$obj->open('archive.zip');
$obj->setCommentName('', 'comment');
/* Notice:  ZipArchive::setCommentName(): Empty string
   as entry name in filename on line n */

/* As of PHP 5.2.1 */
$obj->getCommentName('');
/* Notice:  ZipArchive::getCommentName(): Empty string
   as entry name in filename on line n */
?>
]]>
    </programlisting>
   </example>
  </para>
 </section>

 <section id="migration52.datetime">
  <title>Changes in PHP <link linkend="ref.datetime">datetime</link>
   support</title>

  <para>
   Since PHP 5.1.0, there has been an extension named <literal>date</literal>
   in the PHP core. This is the new implementation of PHP's datetime support.
   Although it will attempt to guess your system's timezone setting, you
   should set the timezone manually. You can do this in any of three ways:
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     in your &php.ini; using the
     <link linkend="ini.date.timezone">date.timezone</link> INI directive
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     on your system using the <constant>TZ</constant> environmental variable
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     from your script using the convenience function 
     <link linkend="function.date-default-timezone-get"><function>date_default_timezone_set</function></link>
  </simpara>
   </listitem>
  </itemizedlist>
  <para>
   All supported <link linkend="timezones">timezones</link> are listed
   in the PHP Manual.
  </para>
  <para>
   With the advent of PHP 5.2.x, there are <type>object</type> representations of the
   date and timezone, named DateTime and DateTimeZone respectively.
   The methods map to existing procedural date functions.
  </para>
 </section>

 <section id="migration52.parameters">
  <title>New Parameters</title>
  <para>
   Some functions were given new parameters in PHP 5.2.x:
  </para>

  <para>PHP Core:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>base64_decode</function>
     - added <parameter>strict</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>setcookie</function>
     - added <parameter>httponly</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>setrawcookie</function>
     - added <parameter>httponly</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>session_set_cookie_params</function>
     - added <parameter>httponly</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>memory_get_usage</function>
     - added <parameter>real_usage</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.curl">curl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>curl_multi_info_read</function>
     - added <parameter>msgs_in_queue</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.imap">imap</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>imap_open</function>
     - added <parameter>n_retries</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>imap_reopen</function>
     - added <parameter>n_retries</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.mbstring">mbstring</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>mb_strrpos</function>
     - added <parameter>offset</parameter>
    </simpara>
    <warning>
     <simpara>
      The <parameter>offset</parameter> parameter was put in the position
      the <parameter>encoding</parameter> parameter used to be.
      Backward compatibility has been
      provided by allowing <parameter>encoding</parameter> to be specified
      as the third parameter.  Using this backward compatibility mode is
      not recommended because it will be removed in a future release of PHP.
     </simpara>
    </warning>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.ming">ming</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="function.swfmovie.streammp3"><function>swfmovie::streamMP3</function></link>
                
     - added <parameter>skip</parameter> in PHP 5.2.1
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.openssl">openssl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>openssl_verify</function>
     - added <parameter>signature_algo</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.pgsql">pgsql</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>pg_escape_bytea</function>
     - added <parameter>connection</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>pg_escape_string</function>
     - added <parameter>connection</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.simplexml">simplexml</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="function.simplexml-element-construct"><function>SimpleXMLElement::__construct</function></link>
                
     - added <parameter>is_prefix</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.simplexml-element-attributes"><function>SimpleXMLElement::attributes</function></link>
                
     - added <parameter>is_prefix</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.simplexml-element-children"><function>SimpleXMLElement::children</function></link>
                
     - added <parameter>is_prefix</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>simplexml_load_file</function>
     - added <parameter>is_prefix</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>simplexml_load_string</function>
     - added <parameter>is_prefix</parameter>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.spl">spl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     array iterator_to_array(Traversable it [, bool use_keys = true])
     - added <parameter>use_keys</parameter> in PHP 5.2.1
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.xmlreader">xmlreader</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="function.xmlreader-open"><function>XMLReader::open</function></link>
                
     - added <parameter>encoding</parameter>
     and <parameter>options</parameter>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.xmlreader-xml"><function>XMLReader::XML</function></link>
                
     - added <parameter>encoding</parameter>
     and <parameter>options</parameter>
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.functions">
  <title>New Functions</title>
  <para>
   PHP 5.2.x introduced some new functions:
  </para>

  <para>PHP Core:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>array_fill_keys</function>
     - Create an array using the elements of the first parameter as keys,
     each initialized to val
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>error_get_last</function>
     - Get the last occurred error as associative array. Returns &null;
     if there hasn't been an error yet
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>image_type_to_extension</function>
     - Get file extension for image-type returned by getimagesize,
     exif_read_data, exif_thumbnail, exif_imagetype
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>memory_get_peak_usage</function>
     - Returns the peak allocated by PHP memory
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>timezone_abbreviations_list</function>
     - Returns associative array containing DST, offset and the timezone name
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>timezone_identifiers_list</function>
     - Returns numerically indexed array with all timezone identifiers
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>timezone_name_from_abbr</function>
     - Returns the timezone name from abbreviation
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>stream_socket_shutdown</function>
     - Causes all or part of a full-duplex connection on the socket
     associated with stream to be shut down. As of PHP 5.2.1.
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.mbstring">mbstring</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>mb_list_encodings_alias_names</function>
     - Returns an array of all supported entity encodings
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_list_mime_names</function>
     - Returns an array or string of all supported mime names
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_stripos</function>
     - Finds position of first occurrence of a string within another,
     case insensitive
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_stristr</function>
     - Finds first occurrence of a string within another, case insensitive
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_strrchr</function>
     - Finds the last occurrence of a character in a string within another
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_strrichr</function>
     - Finds the last occurrence of a character in a string within another,
     case insensitive
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_strripos</function>
     - Finds position of last occurrence of a string within another,
     case insensitive
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>mb_strstr</function>
     - Finds first occurrence of a string within another
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.ming">ming</link> (As of PHP 5.2.1):</para>
  <itemizedlist>
   <listitem>
    <simpara>
     void ming_setSWFCompression(int num)
     - Sets output compression
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void swfmovie::namedanchor(string name)
     - Creates anchor
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void swfmovie::protect([string pasword])
     - Protects
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.openssl">openssl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>openssl_csr_get_public_key</function>
     - Extracts public key from a CERT and prepares it for use
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>openssl_csr_get_subject</function>
     - Returns the subject of a CERT
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>openssl_pkey_get_details</function>
     - Returns an array with the key details (bits, pkey, type)
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.spl">spl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>spl_object_hash</function>
     - Return hash id for given object
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int iterator_apply(Traversable it, mixed function [, mixed params])
     - Calls a function for every element in an iterator
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.pcre">pcre</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>preg_last_error</function>
     - Returns the error code of the last regex execution
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.pgsql">pgsql</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>pg_field_table</function>
     - Returns the name of the table field belongs to, or table's oid
     if oid_only is true
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.posix">posix</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     bool posix_initgroups(string name, int base_group_id)
     - Calculate the group access list for the user specified in name
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.gmp">gmp</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>gmp_nextprime</function>
     - Finds next prime of a
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.xmlwriter">xmlwriter</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <function>xmlwriter_full_end_element</function>
     - End current element - returns FALSE on error
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>xmlwriter_write_raw</function>
     - Write text - returns FALSE on error
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>xmlwriter_start_dtd_entity</function>
     - Create start DTD Entity - returns FALSE on error
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>xmlwriter_end_dtd_entity</function>
     - End current DTD Entity - returns FALSE on error
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <function>xmlwriter_write_dtd_entity</function>
     - Write full DTD Entity tag - returns FALSE on error
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.methods">
  <title>New Methods</title>
  <para>
   New methods were introduced in 5.2.0:
  </para>

  <para><link linkend="ref.dom">dom</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="function.dom-domdocument-registernodeclass"><function>DOMDocument::registerNodeClass</function></link>
                
     - Register extended class used to create base node type
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.dom-domelement-setidattribute"><function>DOMElement::setIDAttribute</function></link>
                
     - Declares the attribute specified by name to be of type ID
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.dom-domelement-setidattributenode"><function>DOMElement::setIDAttributeNode</function></link>
                
     - Declares the attribute specified by node to be of type ID
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="function.dom-domelement-setidattributens"><function>DOMElement::setIDAttributeNS</function></link>
                
     - Declares the attribute specified by local name and namespace URI to be
     of type ID
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     DOMNode::C14N([bool exclusive [, bool with_comments [, array xpath [, array \
                ns_prefixes]]]])
     - Canonicalize nodes to a string
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     DOMNode::C14NFile(string uri [, bool exclusive [, bool with_comments [, array \
                xpath [, array ns_prefixes]]]])
     - Canonicalize nodes to a file
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     DOMNode::getNodePath()
     - Gets an xpath for a node
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.soap">soap</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     SoapServer::setObject(object obj)
     - Sets object which will handle SOAP requests
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.spl">spl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     int ArrayObject::asort(void)
     - Sort the entries by values
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int ArrayObject::ksort(void)
     - Sort the entries by key
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int ArrayObject::natcasesort(void)
     - Sort the entries by key using case insensitive
     "natural order" algorithm.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int ArrayObject::natsort(void)
     - Sort the entries by values using "natural order" algorithm.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int ArrayObject::uasort(callback cmp_function)
     - Sort the entries by values user defined function
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int ArrayObject::uksort(callback cmp_function)
     - Sort the entries by key using user defined function.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     ArrayIterator AppendIterator::getArrayIterator()
     - Get access to inner ArrayIterator
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int AppendIterator::getIteratorIndex()
     - Get index of iterator
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     bool CachingIterator::getCache()
     - Return the cache
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     int CachingIterator::getFlags()
     - Return the internal flags
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     bool CachingIterator::offsetExists(mixed index)
     - Return whether the requested index exists
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     string CachingIterator::offsetGet(mixed index)
     - Return the internal cache if used
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void CachingIterator::offsetSet(mixed index, mixed newval)
     - Set given index in cache
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void CachingIterator::offsetUnset(mixed index)
     - Unset given index in cache
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void CachingIterator::setFlags()
     - Set the internal flags
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     array("delimiter" =>, "enclosure" =>) SplFileObject::getCsvControl(void)
     - Get the delimiter and enclosure character used in fgetcsv
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     void SplFileObject::setCsvControl([string delimiter = ',' [, string enclosure = \
                '"']])
     - Set the delimiter and enclosure character used in fgetcsv
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     boolean XMLReader::setSchema(string filename)
     - Use W3C XSD schema to validate the document as it is processed. Activation is \
only possible before the first Read()  </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.zip">zip</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     bool ZipArchive::addEmptyDir(string dirname)
     - Creates an empty directory in the archive
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.removed-extensions">
  <title>Removed Extensions</title>
  <para>
   These extensions have been moved to PECL and are no longer
   part of the PHP distribution.  The PECL package version of
   these extensions will be created according to user demand.
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="ref.filepro">filePro</link>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ref.hwapi">Hyperwave API</link>
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.new-extensions">
  <title>New Extensions</title>
  <para>
   The following are new extensions added (by default) as of PHP 5.2.0:
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="ref.filter">Filter</link>
     - validates and filters data, and is designed for use with insecure
     data such as user input. This extension is enabled by default; the
     default mode RAW does not impact input data in any way.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ref.json">JSON</link>
     - implements the JavaScript Object Notation (JSON)
     data interchange format. This extension is enabled by default.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ref.zip">Zip</link>
     - enables you to transparently read or write ZIP
     compressed archives and the files inside them.
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.classes">
  <title>New Classes</title>
  <para>
   The following classes were introduced in PHP 5.2.0:
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="ref.datetime">DateTime</link>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ref.datetime">DateTimeZone</link>
    </simpara>
   </listitem>

   <listitem>
    <simpara>
     RegexIterator - extends FilterIterator; implements Iterator,
     Traversable, OuterIterator
    </simpara>
    <simpara>
     Constants:
    </simpara>
    <itemizedlist>
     <listitem>
      <simpara>
       <constant>RegexIterator::ALL_MATCHES</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RegexIterator::GET_MATCH</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RegexIterator::MATCH</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RegexIterator::REPLACE</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RegexIterator::SPLIT</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RegexIterator::USE_KEY</constant>
      </simpara>
     </listitem>
    </itemizedlist>
    <simpara>
     Properties:
    </simpara>
    <itemizedlist>
     <listitem>
      <simpara>
       public <property>replacement</property>
      </simpara>
     </listitem>
    </itemizedlist>
    <simpara>
     Methods:
    </simpara>
    <itemizedlist>
     <listitem>
      <simpara>
       RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags \
                [, int preg_flags]]])
       - Create an RegexIterator from another iterator and a regular expression
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::accept()
       - Match (string)current() against regular expression
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::getFlags()
       - Returns current operation flags
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::getMode()
       - Returns current operation mode
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::getPregFlags()
       - Returns current PREG flags (if in use or &null;)
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::setFlags(int new_flags)
       - Set operation flags
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::setMode(int new_mode)
       - Set new operation mode
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RegexIterator::setPregFlags(int new_flags)
       - Set PREG flags
      </simpara>
     </listitem>
    </itemizedlist>
   </listitem>

   <listitem>
    <simpara>
     RecursiveRegexIterator
    </simpara>
    <simpara>
     Constants:
    </simpara>
    <itemizedlist>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::ALL_MATCHES</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::GET_MATCH</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::MATCH</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::REPLACE</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::SPLIT</constant>
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       <constant>RecursiveRegexIterator::USE_KEY</constant>
      </simpara>
     </listitem>
    </itemizedlist>
    <simpara>
     Methods:
    </simpara>
    <itemizedlist>
     <listitem>
      <simpara>
       RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int \
                mode [, int flags [, int preg_flags]]])
       - Create an RecursiveRegexIterator from another recursive iterator and
       a regular expression
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       RecursiveRegexIterator RecursiveRegexIterator::getChildren()
       - Return the inner iterator's children contained in a
       RecursiveRegexIterator
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       bool RecursiveRegexIterator::hasChildren()
       - Check whether the inner iterator's current element has children
      </simpara>
     </listitem>
    </itemizedlist>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.global-constants">
  <title>New Global Constants</title>

  <para>PHP Core:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>M_EULER</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>M_LNPI</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>M_SQRT3</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>M_SQRTPI</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PATHINFO_FILENAME</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PREG_BACKTRACK_LIMIT_ERROR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PREG_BAD_UTF8_ERROR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PREG_INTERNAL_ERROR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PREG_NO_ERROR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PREG_RECURSION_LIMIT_ERROR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>UPLOAD_ERR_EXTENSION</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>STREAM_SHUT_RD</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>STREAM_SHUT_WR</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>STREAM_SHUT_RDWR</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.curl">curl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>CURLE_FILESIZE_EXCEEDED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLE_FTP_SSL_FAILED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLE_LDAP_INVALID_URL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPAUTH_DEFAULT</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPAUTH_SSL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPAUTH_TLS</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPSSL_ALL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPSSL_CONTROL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPSSL_NONE</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLFTPSSL_TRY</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLOPT_FTP_SSL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CURLOPT_FTPSSLAUTH</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.ming">ming</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>SWFTEXTFIELD_USEFONT</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWFTEXTFIELD_AUTOSIZE</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_NOT_COMPRESSED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_ADPCM_COMPRESSED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_MP3_COMPRESSED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_NOT_COMPRESSED_LE</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_NELLY_COMPRESSED</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_5KHZ</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_11KHZ</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_22KHZ</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_44KHZ</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_8BITS</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_16BITS</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_MONO</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SWF_SOUND_STEREO</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.openssl">openssl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>OPENSSL_VERSION_NUMBER</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>OPENSSL_VERSION_TEXT</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.snmp">snmp</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>SNMP_OID_OUTPUT_FULL</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SNMP_OID_OUTPUT_NUMERIC</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.sem">Semaphore</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>MSG_EAGAIN</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>MSG_ENOMSG</constant>
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.class-constants">
  <title>New Class Constants</title>

  <para><link linkend="ref.pdo">pdo</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>PDO::ATTR_DEFAULT_FETCH_MODE</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>PDO::FETCH_PROPS_LATE</constant>
    </simpara>
   </listitem>
  </itemizedlist>

  <para><link linkend="ref.spl">spl</link>:</para>
  <itemizedlist>
   <listitem>
    <simpara>
     <constant>CachingIterator::FULL_CACHE</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>CachingIterator::TOSTRING_USE_INNER</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SplFileObject::READ_AHEAD</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SplFileObject::READ_CSV</constant>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <constant>SplFileObject::SKIP_EMPTY</constant>
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.newconf">
  <title>New INI Configuration Directives</title>
  <para>
   New &php.ini; directives introduced in PHP 5.2.0:
  </para>
  <itemizedlist>
   <listitem>
    <simpara>
     <link linkend="ini.allow-url-include">allow_url_include</link>
    </simpara>
    <simpara>
     This useful option makes it possible to differentiate between
     standard file operations on remote files, and the inclusion of
     remote files.  While the former is usually desirable, the latter can
     be a security risk if used naively.  Starting with PHP 5.2.0, you can
     allow remote file operations while disallowing the inclusion of
     remote files in local scripts.  In fact, this is the default
     configuration.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ini.pcre.backtrack-limit">pcre.backtrack_limit</link>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ini.pcre.recursion-limit">pcre.recursion_limit</link>
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     <link linkend="ini.session.cookie-httponly">session.cookie_httponly</link>
    </simpara>
   </listitem>
  </itemizedlist>
 </section>

 <section id="migration52.errorrep">
  <title>Error Reporting</title>
  <para>
   Some of the existing <constant>E_ERROR</constant> conditions have been
   converted to something that you can catch with a user-defined error
   handler.  If an <link
   linkend="errorfunc.constants"><constant>E_RECOVERABLE_ERROR</constant></link>
   is not handled, it will behave in the same way as
   <constant>E_ERROR</constant> behaves in all versions of PHP.  Errors of
   this type are logged as <literal>Catchable fatal error</literal>.
  </para>
  <para>
   This change means that the value of the <constant>E_ALL</constant>
   <link linkend="ini.error-reporting">error_reporting</link> constant is 
   now 6143, where the previous value was 2047. Because PHP constants have 
   no meaning outside of PHP, in some cases the integer value is used 
   instead so these will need to be adjusted. So for example if you are 
   setting the error_reporting mode from either the
   <link linkend="apache.configuration">httpd.conf</link> or the
   <filename>.htaccess</filename> files, you will need to adjust the value 
   accordingly.  The same applies if you use the numeric value rather than the 
   constant in your PHP scripts.
  </para>
  <para>
   As a side-effect of a change made to prevent duplicate error messages when
   <link linkend="ini.track-errors">track_errors</link> is
   <literal>On</literal>, it is now necessary to return &false; from your
   error handler in order to populate
   <link linkend="reserved.variables.phperrormsg">$php_errormsg</link>.  This
   provides you fine-grain control over the levels of messages stored.
  </para>
 </section>

 <section id="migration52.other">
  <title>Other Enhancements</title>
  <itemizedlist>
   <listitem>
    <simpara>
     Improved memory manager and increased default memory limit.
    </simpara>
    <simpara>
     The new memory manager allocates less memory and works faster than the
     previous incarnation. It allocates memory from the system in large blocks,
     and then manages the heap by itself. The memory_limit value in &php.ini; is
     checked, not for each emalloc() call (as before), but for actual blocks
     requested from the system. This means that memory_limit is far more
     accurate than it used to be, since the old memory manager didn't calculate
     all the memory overhead used by the malloc library.
    </simpara>
    <simpara>
     Thanks to this new-found accuracy memory usage may appear to have increased,
     although actually it has not. To accommodate this apparent increase, the
     default memory_limit setting was also increased - from 8 to 16 megabytes.
    </simpara>
   </listitem>
   <listitem>
    <simpara>
     Added support for constructors in interfaces to force constructor signature
     checks in implementations.
    </simpara>
    <simpara>
     Starting with PHP 5.2.0, interfaces can have constructors. However, if you \
                choose
     to declare a constructor in an interface, each class implementing that interface
     MUST include a constructor with a signature matching that of the base interface
     constructor. By 'signature' we mean the parameter and return type definitions,
     including any type hints and including whether the data is passed by reference
     or by value.
    </simpara>
   </listitem>
  </itemizedlist>
 </section>
</appendix>

<!-- 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
-->



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic