zak             Sun Jul  1 23:03:44 2001 EDT

  Modified files:              
    /phpdoc/en/language control-structures.xml 
  Log:
  Clarified declare/ticks documentation
  Made ticks a sect2 within declare's sect1
  Added an illustrative example for ticks
  
  
Index: phpdoc/en/language/control-structures.xml
diff -u phpdoc/en/language/control-structures.xml:1.30 
phpdoc/en/language/control-structures.xml:1.31
--- phpdoc/en/language/control-structures.xml:1.30      Tue Jun 26 08:32:47 2001
+++ phpdoc/en/language/control-structures.xml   Sun Jul  1 23:03:43 2001
@@ -68,7 +68,7 @@
     program.
    </simpara>
   </sect1>
- 
+
   <sect1 id="control-structures.else">
    <title><literal>else</literal></title>
    <para>
@@ -101,7 +101,7 @@
 
    </para>
   </sect1>
- 
+
   <sect1 id="control-structures.elseif">
    <title><literal>elseif</literal></title>
    <para>
@@ -149,7 +149,7 @@
     <literal>TRUE</literal>.
    </simpara>
   </sect1>
- 
+
   <sect1 id="control-structures.alternative-syntax">
    <title>Alternative syntax for control structures</title>
    <para>
@@ -166,8 +166,8 @@
    </para>
    <para>
     PHP offers an alternative syntax for some of its control
-    structures; namely, <literal>if</literal>, 
-    <literal>while</literal>, <literal>for</literal>, 
+    structures; namely, <literal>if</literal>,
+    <literal>while</literal>, <literal>for</literal>,
     <literal>foreach</literal>, and <literal>switch</literal>.
     In each case, the basic form of the alternate syntax is to change
     the opening brace to a colon (:) and the closing brace to
@@ -262,9 +262,9 @@
                     $i before the increment
                     (post-increment) */
 }
- 
+
 /* example 2 */
- 
+
 $i = 1;
 while ($i &lt;= 10):
     print $i;
@@ -274,7 +274,7 @@
     </informalexample>
    </para>
   </sect1>
- 
+
   <sect1 id="control-structures.do.while">
    <title><literal>do..while</literal></title>
    <simpara>
@@ -292,7 +292,7 @@
    </simpara>
    <para>
     There is just one syntax for <literal>do..while</literal> loops:
- 
+
     <informalexample>
      <programlisting role="php">
 $i = 0;
@@ -340,7 +340,7 @@
     `feature'.
    </simpara>
   </sect1>
- 
+
   <sect1 id="control-structures.for">
    <title><literal>for</literal></title>
    <para>
@@ -386,22 +386,22 @@
     <informalexample>
      <programlisting role="php">
 /* example 1 */
- 
+
 for ($i = 1; $i &lt;= 10; $i++) {
     print $i;
 }
- 
+
 /* example 2 */
- 
+
 for ($i = 1;;$i++) {
     if ($i &gt; 10) {
         break;
     }
     print $i;
 }
- 
+
 /* example 3 */
- 
+
 $i = 1;
 for (;;) {
     if ($i &gt; 10) {
@@ -410,9 +410,9 @@
     print $i;
     $i++;
 }
- 
+
 /* example 4 */
- 
+
 for ($i = 1; $i &lt;= 10; print $i, $i++) ;
      </programlisting>
     </informalexample>
@@ -449,7 +449,7 @@
    <title><literal>foreach</literal></title>
    <para>
     PHP 4 (not PHP 3) includes a <literal>foreach</literal> construct,
-    much like perl and some other languages. This simply gives an easy 
+    much like perl and some other languages. This simply gives an easy
     way to iterate over arrays. There are two syntaxes; the second is
     a minor but useful extension of the first:
     <informalexample>
@@ -475,7 +475,7 @@
     <note>
      <para>
       When <literal>foreach</literal> first starts executing, the
-      internal array pointer is automatically reset to the first element 
+      internal array pointer is automatically reset to the first element
       of the array. This means that you do not need to call
       <function>reset</function> before a <literal>foreach</literal>
       loop.
@@ -585,7 +585,7 @@
     </informalexample>
    </para>
   </sect1>
- 
+
   <sect1 id="control-structures.break">
    <title><literal>break</literal></title>
    <simpara>
@@ -596,7 +596,7 @@
    <simpara>
     <literal>break</literal> accepts an optional numeric argument
     which tells it how many nested enclosing structures are to be
-    broken out of. 
+    broken out of.
    </simpara>
    <para>
     <informalexample>
@@ -628,7 +628,7 @@
     </informalexample>
    </para>
   </sect1>
- 
+
   <sect1 id="control-structures.continue">
    <title><literal>continue</literal></title>
    <simpara>
@@ -668,7 +668,7 @@
      </informalexample>
     </para>
   </sect1>
- 
+
   <sect1 id="control-structures.switch">
    <title><literal>switch</literal></title>
    <simpara>
@@ -678,7 +678,7 @@
     different values, and execute a different piece of code depending
     on which value it equals to.  This is exactly what the
     <literal>switch</literal> statement is for.
-   </simpara> 
+   </simpara>
    <para>
     The following two examples are two different ways to write the
     same thing, one using a series of <literal>if</literal>
@@ -695,7 +695,7 @@
 if ($i == 2) {
     print "i equals 2";
 }
- 
+
 switch ($i) {
     case 0:
         print "i equals 0";
@@ -823,47 +823,112 @@
     </informalexample>
    </para>
   </sect1>
-  
+
   <sect1 id="control-structures.declare">
    <title><literal>declare</literal></title>
-   <simpara>
-    The <literal>declare</literal> statement is used to temporarily
-    change the state of the parser in a block of code.  Here's how it looks:
-   </simpara>
    <para>
+    The <literal>declare</literal> construct is used to is
+    used to set execution directives for a block of code.
+    The syntax of <literal>declare</literal> is similiar to
+    the syntax of other flow control constructs:
     <informalexample>
+     <programlisting>
+declare (directive) statement
+     </programlisting>
+    </informalexample>
+   </para>
+   <para>
+    The <literal>directive</literal> section allows the
+    behavior of the <literal>declare</literal> block to
+    be set.
+    Currently only one directive is recognized: the
+    <literal>ticks</literal> directive. (See below for more
+    information on the
+    <link linkend="control-structures.declare.ticks">ticks</link>
+    directive)
+   </para>
+   <para>
+    The <literal>statement</literal> part of the
+    <literal>declare</literal> block will be executed - how
+    it is executed and what side-effects occur during execution
+    may depend on the directive set in the
+    <literal>directive</literal> block.
+   </para>
+   <sect2 id="control-structures.declare.ticks">
+    <title>Ticks</title>
+    <para>A tick is an event that occurs for every
+    <replaceable>N</replaceable> low-level statements executed
+    by the parser within the <literal>declare</literal> block.
+    The value for <replaceable>N</replaceable> is specified
+    using <literal>ticks=<replaceable>N</replaceable></literal>
+    within the <literal>declare</literal> blocks's
+    <literal>directive</literal> section.
+   </para>
+   <para>
+    The event(s) that occurs on each tick is specified using the
+    <function>register_tick_function</function>. See the example 
+    below for more details. Note that more than one event can occur
+    for each tick.
+   </para>
+   <para>
+    <example>
+     <title>Profile a section of PHP code</title>
      <programlisting role="php">
-function tick()
+&lt;pre&gt;
+&lt;?php
+// A function that records the time when it is called
+function profile ($dump = FALSE)
 {
-    static $i;
-    printf("[tick i=%d]\n", ++$i);
+    static $profile;
+
+    // Return the times stored in profile, then erase it
+    if ($dump) {
+        $temp = $profile;
+        unset ($profile);
+        return ($temp);
+    }
+
+    $profile[] = microtime ();
 }
 
-register_tick_function("tick");
+// Set up a tick handler
+register_tick_function("profile");
 
-declare (ticks = 2) {
-    1; 2; 3;
+// Initialize the function before the declare block
+profile ();
+
+// Run a block of code, throw a tick every 2nd statement
+declare (ticks=2) {
+    for ($x = 1; $x &lt; 50; ++$x) {
+        echo similar_text (md5($x), md5($x*$x)), "&lt;br&gt;";
+    }
 }
-</programlisting>
-    </informalexample>
-    This example shows the only implemented parser parameter today:
-    ticks.  A tick is an event that occurs for every
-    <replaceable>N</replaceable> low-level statements executed by the
-    parser, where <replaceable>N</replaceable> is specified in the
-    <literal>declare</literal> statement.  The example above will print:
-    <computeroutput>[tick i=1]
-[tick i=2]
-</computeroutput>
+
+// Display the data stored in the profiler
+print_r (profile (TRUE));
+?&gt;
+&lt;/pre&gt;
+     </programlisting>
+    </example>
+    The example profiles the PHP code within the 'declare'
+    block, recording the time at which every second low-level
+    statement in the block was executed. This information can
+    then be used to find the slow areas within particular
+    segments of code. This process can be performed using other
+    methods: using ticks is more convenient and easier to
+    implement.
    </para>
    <simpara>
-    Ticks is well suited for implementing simple multitasking,
-    backgrounded IO and many other things in PHP.
+    Ticks are well suited for debugging, implementing simple
+    multitasking, backgrounded I/O and many other tasks.
    </simpara>
    <simpara>
     See also <function>register_tick_function</function> and
     <function>unregister_tick_function</function>.
    </simpara>
+   </sect2>
   </sect1>
+  
   <sect1 id="function.require">
    <title><function>require</function></title>
    <simpara>
@@ -947,7 +1012,7 @@
     <informalexample>
      <programlisting role="php">
 /* This example assumes that someserver is configured to parse .php
- * files and not .txt files. Also, 'works' here means that the variables 
+ * files and not .txt files. Also, 'works' here means that the variables
  * $varone and $vartwo are available within the require()ed file. */
 
 /* Won't work; file.txt wasn't handled by someserver. */
@@ -955,10 +1020,10 @@
 
 /* Won't work; looks for a file named 'file.php?varone=1&amp;vartwo=2'
  * on the local filesystem. */
-require ("file.php?varone=1&amp;vartwo=2");               
+require ("file.php?varone=1&amp;vartwo=2");
 
 /* Works. */
-require ("http://someserver/file.php?varone=1&amp;vartwo=2";); 
+require ("http://someserver/file.php?varone=1&amp;vartwo=2";);
 
 $varone = 1;
 $vartwo = 2;
@@ -979,10 +1044,10 @@
    <simpara>
     See also <function>include</function>, <function>require_once</function>,
     <function>include_once</function>, <function>readfile</function>,
-       and <function>virtual</function>.
+    and <function>virtual</function>.
    </simpara>
   </sect1>
- 
+
   <sect1 id="function.include">
    <title><function>include</function></title>
    <simpara>
@@ -1038,14 +1103,14 @@
     <informalexample>
      <programlisting role="php">
 /* This is WRONG and will not work as desired. */
- 
+
 if ($condition)
     include($file);
 else
     include($other);
- 
+
 /* This is CORRECT. */
- 
+
 if ($condition) {
     include($file);
 } else {
@@ -1123,7 +1188,7 @@
      </screen>
      However, PHP 3 will give the following output:
      <screen>
-Before the return 
+Before the return
 27Back in main.html
 
 Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
@@ -1167,7 +1232,7 @@
     <informalexample>
      <programlisting role="php">
 /* This example assumes that someserver is configured to parse .php
- * files and not .txt files. Also, 'works' here means that the variables 
+ * files and not .txt files. Also, 'works' here means that the variables
  * $varone and $vartwo are available within the include()ed file. */
 
 /* Won't work; file.txt wasn't handled by someserver. */
@@ -1175,10 +1240,10 @@
 
 /* Won't work; looks for a file named 'file.php?varone=1&amp;vartwo=2'
  * on the local filesystem. */
-include ("file.php?varone=1&amp;vartwo=2");               
+include ("file.php?varone=1&amp;vartwo=2");
 
 /* Works. */
-include ("http://someserver/file.php?varone=1&amp;vartwo=2";); 
+include ("http://someserver/file.php?varone=1&amp;vartwo=2";);
 
 $varone = 1;
 $vartwo = 2;
@@ -1190,58 +1255,58 @@
    <simpara>
     See also <function>require</function>, <function>require_once</function>,
     <function>include_once</function>, <function>readfile</function>,
-       and <function>virtual</function>.
+    and <function>virtual</function>.
    </simpara>
   </sect1>
- 
+
   <sect1 id="function.require-once">
    <title><function>require_once</function></title>
    <para>
     The <function>require_once</function> statement replaces
     itself with the specified file, much like the C preprocessor's
     <literal>#include</literal> works, and in that respect is
-       similar to the <function>require</function> statement. The main
-       difference is that in an inclusion chain, the use of
-       <function>require_once</function> will assure that the code is
-       added to your script only once, and avoid clashes with variable
-       values or function names that can happen.
+    similar to the <function>require</function> statement. The main
+    difference is that in an inclusion chain, the use of
+    <function>require_once</function> will assure that the code is
+    added to your script only once, and avoid clashes with variable
+    values or function names that can happen.
    </para>
    <para>
      For example, if you create the following 2 include files
-        <literal>utils.inc</literal> and <literal>foolib.inc</literal>
-        <example>
-        <title>utils.inc</title>
-        <programlisting role="php">
+     <literal>utils.inc</literal> and <literal>foolib.inc</literal>
+     <example>
+     <title>utils.inc</title>
+     <programlisting role="php">
 &lt;?php
 define(PHPVERSION, floor(phpversion()));
 echo "GLOBALS ARE NICE\n";
 function goodTea() {
-       return "Oolong tea tastes good!";
+    return "Oolong tea tastes good!";
 }
 ?&gt;
-        </programlisting>
-        </example>
-        <example>
-        <title>foolib.inc</title>
-        <programlisting role="php">
+     </programlisting>
+     </example>
+     <example>
+     <title>foolib.inc</title>
+     <programlisting role="php">
 &lt;?php
 require ("utils.inc");
 function showVar($var) {
-       if (PHPVERSION == 4) {
-               print_r($var);
-       } else {
-               var_dump($var);
-       }
+    if (PHPVERSION == 4) {
+        print_r($var);
+    } else {
+        var_dump($var);
+    }
 }
 
 // bunch of other functions ...
 ?&gt;
-        </programlisting>
-        </example>
-        And then you write a script <literal>cause_error_require.php</literal>
-        <example>
-        <title>cause_error_require.php</title>
-        <programlisting role="php">
+     </programlisting>
+     </example>
+     And then you write a script <literal>cause_error_require.php</literal>
+     <example>
+     <title>cause_error_require.php</title>
+     <programlisting role="php">
 &lt;?php
 require("foolib.inc");
 /* the following will generate an error */
@@ -1253,45 +1318,45 @@
 echo "Printing foo: \n";
 showVar($foo);
 ?&gt;
-        </programlisting>
-        </example>
-        When you try running the latter one, the resulting ouptut will be (using
-        PHP 4.01pl2):
-        <informalexample>
-        <programlisting>
+     </programlisting>
+     </example>
+     When you try running the latter one, the resulting ouptut will be (using
+     PHP 4.01pl2):
+     <informalexample>
+     <programlisting>
 GLOBALS ARE NICE
 GLOBALS ARE NICE
 
 Fatal error:  Cannot redeclare goodTea() in utils.inc on line 5
-        </programlisting>
-        </informalexample>
-        By modifying <literal>foolib.inc</literal> and
-        <literal>cause_errror_require.php</literal> 
-        to use <function>require_once</function>
-        instead of <function>require</function> and renaming the
-        last one to <literal>avoid_error_require_once.php</literal>, we have:
-        <example>
-        <title>foolib.inc (fixed)</title>
-        <programlisting role="php">
+     </programlisting>
+     </informalexample>
+     By modifying <literal>foolib.inc</literal> and
+     <literal>cause_errror_require.php</literal>
+     to use <function>require_once</function>
+     instead of <function>require</function> and renaming the
+     last one to <literal>avoid_error_require_once.php</literal>, we have:
+     <example>
+     <title>foolib.inc (fixed)</title>
+     <programlisting role="php">
 ...
 require_once("utils.inc");
 function showVar($var) {
 ...
-        </programlisting>
-        </example>
-        <example>
-        <title>avoid_error_require_once.php</title>
-        <programlisting role="php">
+     </programlisting>
+     </example>
+     <example>
+     <title>avoid_error_require_once.php</title>
+     <programlisting role="php">
 ...
 require_once("foolib.inc");
 require_once("utils.inc");
 $foo = array("1",array("complex","quaternion"));
 ...
-        </programlisting>
-        </example>
-        And when running the latter, the output will be (using PHP 4.0.1pl2):
-        <informalexample>
-        <programlisting>
+     </programlisting>
+     </example>
+     And when running the latter, the output will be (using PHP 4.0.1pl2):
+     <informalexample>
+     <programlisting>
 GLOBALS ARE NICE
 this is requiring globals.inc again which is also
 required in foolib.inc
@@ -1307,53 +1372,53 @@
         )
 
 )
-        </programlisting>
-        </informalexample>
+     </programlisting>
+     </informalexample>
    </para>
    <para>
      Also note that, analogous to the behavior of the
-        <literal>#include</literal> of the C preprocessor, this statement
-        acts at "compile time", e.g. when the script is parsed and before it
-        is executed, and should not be used for parts of the script that need
-        to be inserted dynamically during its execution. You should use
-        <function>include_once</function> or <function>include</function>
-        for that purpose.
+     <literal>#include</literal> of the C preprocessor, this statement
+     acts at "compile time", e.g. when the script is parsed and before it
+     is executed, and should not be used for parts of the script that need
+     to be inserted dynamically during its execution. You should use
+     <function>include_once</function> or <function>include</function>
+     for that purpose.
    </para>
    <para>
-     For more examples on using <function>require_once</function> and 
-        <function>include_once</function>, look at the PEAR code included in
-        the latest PHP source code distributions.
+     For more examples on using <function>require_once</function> and
+     <function>include_once</function>, look at the PEAR code included in
+     the latest PHP source code distributions.
    </para>
    <para>
     See also: <function>require</function>,
     <function>include</function>, <function>include_once</function>,
     <function>get_required_files</function>,
     <function>get_included_files</function>, <function>readfile</function>,
-       and <function>virtual</function>.
+    and <function>virtual</function>.
    </para>
   </sect1>
-  
+
   <sect1 id="function.include-once">
    <title><function>include_once</function></title>
    <para>
     The <function>include_once</function> statement includes and evaluates
     the specified file during the execution of the script.
-       This is a behavior similar to the <function>include</function> statement,
-       with the important difference that if the code from a file has already
-       been included, it will not be included again.
+    This is a behavior similar to the <function>include</function> statement,
+    with the important difference that if the code from a file has already
+    been included, it will not be included again.
    </para>
    <para>
     As mentioned in the <function>require_once</function> description, the
-       <function>include_once</function> should be used in the cases in which
-       the same file might be included and evaluated more than once during a
-       particular execution of a script, and you want to be sure that it is
-       included exactly once to avoid problems with function redefinitions,
-       variable value reassignments, etc.
+    <function>include_once</function> should be used in the cases in which
+    the same file might be included and evaluated more than once during a
+    particular execution of a script, and you want to be sure that it is
+    included exactly once to avoid problems with function redefinitions,
+    variable value reassignments, etc.
    </para>
    <para>
-     For more examples on using <function>require_once</function> and 
-        <function>include_once</function>, look at the PEAR code included in
-        the latest PHP source code distributions.
+     For more examples on using <function>require_once</function> and
+     <function>include_once</function>, look at the PEAR code included in
+     the latest PHP source code distributions.
    </para>
    <para>
      <function>include_once</function> was added in PHP 4.0.1pl2
@@ -1363,12 +1428,12 @@
     <function>include</function>, <function>require_once</function>,
     <function>get_required_files</function>,
     <function>get_included_files</function>, <function>readfile</function>,
-       and <function>virtual</function>.
+    and <function>virtual</function>.
    </para>
   </sect1>
- 
+
  </chapter>
- 
+
  <!-- Keep this comment at the end of the file
  Local variables:
  mode: sgml
@@ -1387,4 +1452,4 @@
  -->
 <!-- Keep this comment for vi/vim/gvim
      vi: et:ts=1:sw=1
---> 
+-->

Reply via email to