[DOC-CVS] [doc-en] master: WASM: Enable runnable examples for language sections: attributes, generators and references (#5484)

[email protected] (AllenJB via GitHub) Thu, 7 May 2026 18:20:02 +0000
Newsgroups php.doc.cvs
Message-ID <[email protected]>
Author: AllenJB (AllenJB)
Committer: GitHub (web-flow)
Pusher: jordikroon
Date: 2026-05-07T20:19:58+02:00

Commit: https://github.com/php/doc-en/commit/50e6f42c83ac3f6de5e1086b649e06adedd562ff
Raw diff: https://github.com/php/doc-en/commit/50e6f42c83ac3f6de5e1086b649e06adedd562ff.diff

WASM: Enable runnable examples for language sections: attributes, generators and references (#5484)

* Enable runnable (WASM) examples for language.generators and language.attributes sections

Co-authored-by: Louis-Arnaud <[email protected]>

Changed paths:
  M  language/attributes.xml
  M  language/generators.xml
  M  language/references.xml


Diff:

diff --git a/language/attributes.xml b/language/attributes.xml
index ced697417d32..81f1796c71b3 100644
--- a/language/attributes.xml
+++ b/language/attributes.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
- <chapter xml:id="language.attributes" xmlns="http://docbook.org/ns/docbook">
+ <chapter xml:id="language.attributes" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
   <title>Attributes</title>
   <sect1 xml:id="language.attributes.overview">
    <title>Attributes overview</title>
@@ -30,7 +30,7 @@
 
    <example>
     <title>Implementing optional methods of an interface with Attributes</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 interface ActionHandler
@@ -121,7 +121,7 @@ executeAction($copyAction);
    <example>
     <title>Attribute Syntax</title>
 
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 // a.php
@@ -222,7 +222,11 @@ function dumpAttributeData($reflection) {
 }
 
 dumpAttributeData(new ReflectionClass(Thing::class));
-/*
+]]>
+    </programlisting>
+    &example.outputs;
+    <screen>
+<![CDATA[
 string(11) "MyAttribute"
 array(1) {
   ["value"]=>
@@ -232,10 +236,8 @@ object(MyAttribute)#3 (1) {
   ["value"]=>
   int(1234)
 }
-*/
-
 ]]>
-    </programlisting>
+    </screen>
    </example>
 
    <para>
@@ -250,6 +252,21 @@ object(MyAttribute)#3 (1) {
     <programlisting role="php">
 <![CDATA[
 <?php
+#[Attribute]
+class MyAttribute
+{
+    public $value;
+
+    public function __construct($value)
+    {
+        $this->value = $value;
+    }
+}
+
+#[MyAttribute(value: 1234)]
+class Thing
+{
+}
 
 function dumpMyAttributeData($reflection) {
     $attributes = $reflection->getAttributes(MyAttribute::class);
@@ -280,7 +297,7 @@ dumpMyAttributeData(new ReflectionClass(Thing::class));
   <example>
    <title>Simple Attribute Class</title>
 
-   <programlisting role="php">
+   <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
@@ -305,7 +322,7 @@ class MyAttribute
   <example>
    <title>Using target specification to restrict where attributes can be used</title>
 
-   <programlisting role="php">
+   <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
@@ -348,7 +365,7 @@ class MyAttribute
    <example>
     <title>Using IS_REPEATABLE to allow attribute on a declaration multiple times</title>
 
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
diff --git a/language/generators.xml b/language/generators.xml
index 06e6bbf2f709..ad41e84e6dea 100644
--- a/language/generators.xml
+++ b/language/generators.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<chapter xml:id="language.generators" xmlns="http://docbook.org/ns/docbook">
+<chapter xml:id="language.generators" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
  <title>Generators</title>
 
  <sect1 xml:id="language.generators.overview">
@@ -84,7 +84,6 @@ echo 'Single digit odd numbers from xrange(): ';
 foreach (xrange(1, 9, 2) as $number) {
     echo "$number ";
 }
-?>
 ]]>
    </programlisting>
    &example.outputs;
@@ -166,7 +165,6 @@ $generator = gen_one_to_three();
 foreach ($generator as $value) {
     echo "$value\n";
 }
-?>
 ]]>
     </programlisting>
     &example.outputs;
@@ -230,7 +228,6 @@ foreach (input_parser($input) as $id => $fields) {
     echo "    $fields[0]\n";
     echo "    $fields[1]\n";
 }
-?>
 ]]>
      </programlisting>
      &example.outputs;
@@ -270,7 +267,6 @@ function gen_three_nulls() {
 }
 
 var_dump(iterator_to_array(gen_three_nulls()));
-?>
 ]]>
      </programlisting>
      &example.outputs;
@@ -320,7 +316,6 @@ function &gen_reference() {
 foreach (gen_reference() as &$number) {
     echo (--$number).'... ';
 }
-?>
 ]]>
      </programlisting>
      &example.outputs;
@@ -386,7 +381,6 @@ function gen() {
 }
 // pass false as second parameter to get an array [0, 1, 2, 3, 4]
 var_dump(iterator_to_array(gen()));
-?>
 ]]>
        </programlisting>
        &example.outputs;
@@ -432,7 +426,6 @@ function eight() {
 foreach (count_to_ten() as $num) {
     echo "$num ";
 }
-?>
 ]]>
      </programlisting>
      &example.outputs;
@@ -476,7 +469,6 @@ foreach ($gen as $num) {
     echo "$num ";
 }
 echo $gen->getReturn();
-?>
 ]]>
      </programlisting>
      &example.outputs;
@@ -501,7 +493,7 @@ echo $gen->getReturn();
   </para>
 
   <informalexample>
-   <programlisting role="php">
+   <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 function getLinesFromFile($fileName) {
@@ -559,7 +551,6 @@ class LineIterator implements Iterator {
         fclose($this->fileHandle);
     }
 }
-?>
 ]]>
    </programlisting>
   </informalexample>
diff --git a/language/references.xml b/language/references.xml
index 7eafdfacfcdb..106ee01df022 100644
--- a/language/references.xml
+++ b/language/references.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
- <chapter xml:id="language.references" xmlns="http://docbook.org/ns/docbook">
+ <chapter xml:id="language.references" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
   <title>References Explained</title>
   
   <sect1 xml:id="language.references.whatare">
@@ -38,13 +38,10 @@
      In the first of these, PHP references allow you to make two
      variables refer to the same content. Meaning, when you do:
      <informalexample>
-      <programlisting role="php">
+      <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
-
 $a =& $b;
-
-?>
 ]]>
       </programlisting>
      </informalexample>
@@ -81,8 +78,6 @@ var_dump(array_key_exists('b', $b)); // bool(true)
 $c = new stdClass();
 foo($c->d);
 var_dump(property_exists($c, 'd')); // bool(true)
-
-?>
 ]]>
        </programlisting>
       </example>
@@ -92,13 +87,10 @@ var_dump(property_exists($c, 'd')); // bool(true)
      The same syntax can be used with functions that return
      references:
      <informalexample>
-      <programlisting role="php">
+      <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
-
 $foo =& find_var($bar);
-
-?>
 ]]>
       </programlisting>
      </informalexample>
@@ -120,7 +112,6 @@ $foo =& find_var($bar);
        <programlisting role="php">
 <![CDATA[
 <?php
-
 $var1 = "Example variable";
 $var2 = "";
 
@@ -140,8 +131,6 @@ echo "var2 is set to '$var2'\n"; // var2 is set to ''
 
 global_references(true);
 echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'
-
-?>
 ]]>
        </programlisting>
       </example>
@@ -159,7 +148,6 @@ echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'
        <programlisting role="php">
 <![CDATA[
 <?php
-
 $ref = 0;
 $row =& $ref;
 
@@ -168,8 +156,6 @@ foreach (array(1, 2, 3) as $row) {
 }
 
 echo $ref; // 3 - last element of the iterated array
-
-?>
 ]]>
        </programlisting>
       </example>
@@ -185,7 +171,6 @@ echo $ref; // 3 - last element of the iterated array
       <programlisting role="php">
 <![CDATA[
 <?php
-
 $a = 1;
 $b = array(2, 3);
 
@@ -194,8 +179,8 @@ $arr[0]++;
 $arr[1]++;
 $arr[2]++;
 /* $a == 2, $b == array(3, 4); */
-
-?>
+var_dump($a);
+var_dump($b);
 ]]>
       </programlisting>
      </informalexample>
@@ -216,6 +201,7 @@ $a = 1;
 $b =& $a;
 $c = $b;
 $c = 7; // $c is not a reference; no change to $a or $b
+print "a = {$a}; b = {$b}; c = {$c}\n\n";
 
 /* Assignment of array variables */
 $arr = array(1);
@@ -224,8 +210,9 @@ $arr2 = $arr; // Not an assignment-by-reference!
 $arr2[0]++;
 /* $a == 2, $arr == array(2) */
 /* The contents of $arr are changed even though it's not a reference! */
-
-?>
+print "a = {$a}\n";
+var_dump($arr);
+var_dump($arr2);
 ]]>
       </programlisting>
      </informalexample>
@@ -245,16 +232,14 @@ $arr2[0]++;
       <programlisting role="php">
 <![CDATA[
 <?php
-
 function foo(&$var)
 {
     $var++;
 }
 
-$a=5;
+$a = 5;
 foo($a);
-
-?>
+print $a;
 ]]>
       </programlisting>
      </informalexample>
@@ -281,18 +266,15 @@ foo($a);
     As said before, references are not pointers. That means, the
     following construct won't do what you expect:
     <informalexample>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
-
 function foo(&$var)
 {
     $var =& $GLOBALS["baz"];
 }
 
 foo($bar);
-
-?>
 ]]>
      </programlisting>
     </informalexample>
@@ -322,18 +304,14 @@ foo($bar);
      <programlisting role="php">
 <![CDATA[
 <?php
-
 function foo(&$var)
 {
     $var++;
 }
 
-$a=5;
-
+$a = 5;
 foo($a);
-// $a is 6 here
-
-?>
+print $a; // $a is 6 here
 ]]>
      </programlisting>
     </informalexample>
@@ -364,6 +342,7 @@ foo($a);
 function foo(&$var)
 {
     $var++;
+    print $var;
 }
 
 function &bar()
@@ -373,8 +352,6 @@ function &bar()
 }
 
 foo(bar());
-
-?>
 ]]>
      </programlisting>
     </informalexample>
@@ -389,7 +366,7 @@ foo(bar());
   result is undefined. For example, the following examples of passing
   by reference are invalid:
     <informalexample>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
@@ -413,8 +390,6 @@ class Foobar {}
 
 foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                   // Notice: Only variables should be passed by reference
-
-?>
 ]]>
      </programlisting>
     </informalexample>
@@ -449,8 +424,6 @@ $obj = new Foo();
 $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42
 $obj->value = 2;
 echo $myValue;                // Prints the new value of $obj->value, i.e. 2
-
-?> 
 ]]>
      </programlisting>
     </informalexample>
@@ -495,14 +468,17 @@ $collection = &collector();
 $collection[] = 'foo';
 
 print_r(collector());
-// Array
-// (
-//    [0] => foo
-// )
-
-?> 
 ]]>
      </programlisting>
+     &example.outputs;
+     <screen>
+<![CDATA[
+Array
+(
+    [0] => foo
+)
+]]>
+     </screen>
     </informalexample>
    <note>
     <simpara>
@@ -513,7 +489,7 @@ print_r(collector());
    To pass the returned reference to another function expecting a reference
    you can use this syntax:
     <informalexample>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
@@ -524,8 +500,6 @@ function &collector()
 }
 
 array_push(collector(), 'foo');
-
-?> 
 ]]>
      </programlisting>
     </informalexample>
@@ -552,8 +526,8 @@ array_push(collector(), 'foo');
 $a = 1;
 $b =& $a;
 unset($a); 
-
-?>
+var_dump($a);
+var_dump($b);
 ]]>
      </programlisting>
     </informalexample>
@@ -582,13 +556,10 @@ unset($a);
      are in fact creating reference to a global variable. That means,
      this is the same as:
      <informalexample>
-      <programlisting role="php">
+      <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
-
 $var =& $GLOBALS["var"];
-
-?>
 ]]>
       </programlisting>
      </informalexample>