[DOC-CVS] [doc-en] master: WASM: Enable runnable examples for language.namespaces section (#5478)

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

Commit: https://github.com/php/doc-en/commit/1fade2bc5f160b23c2f46c3f854b833fab0e69f4
Raw diff: https://github.com/php/doc-en/commit/1fade2bc5f160b23c2f46c3f854b833fab0e69f4.diff

WASM: Enable runnable examples for language.namespaces section (#5478)

* Enable runnable (WASM) examples for language.namespaces section

Changed paths:
  M  language/namespaces.xml


Diff:

diff --git a/language/namespaces.xml b/language/namespaces.xml
index e57a88c1dbce..98f35945224b 100644
--- a/language/namespaces.xml
+++ b/language/namespaces.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
 <chapter xml:id="language.namespaces" xmlns="http://docbook.org/ns/docbook"
- version="1.1">
+ version="1.1" annotations="interactive">
  <title>Namespaces</title>
 
  <sect1 xml:id="language.namespaces.rationale">
@@ -58,16 +58,19 @@ function myfunction() {}
 const MYCONST = 1;
 
 $a = new MyClass;
+print $a::class . "\n";
 $c = new \my\name\MyClass; // see "Global Space" section
+print $c::class . "\n";
 
 $a = strlen('hi'); // see "Using namespaces: fallback to global
                    // function/constant" section
+print $a . "\n";
 
 $d = namespace\MYCONST; // see "namespace operator and __NAMESPACE__
                         // constant" section
+print $d . "\n";
 $d = __NAMESPACE__ . '\MYCONST';
 echo constant($d); // see "Namespaces and dynamic language features" section
-?>
     ]]>
    </programlisting>
   </example>
@@ -101,7 +104,7 @@ echo constant($d); // see "Namespaces and dynamic language features" section
    <xref linkend="control-structures.declare" /> keyword.
    <example>
     <title>Declaring a single namespace</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject;
@@ -109,8 +112,6 @@ namespace MyProject;
 const CONNECT_OK = 1;
 class Connection { /* ... */ }
 function connect() { /* ... */ }
-
-?>
 ]]>
     </programlisting>
    </example>
@@ -125,12 +126,11 @@ function connect() { /* ... */ }
    no non-PHP code may precede a namespace declaration, including extra whitespace:
    <example>
     <title>Declaring a single namespace</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <html>
 <?php
 namespace MyProject; // fatal error - namespace must be the first statement in the script
-?>
 ]]>
     </programlisting>
    </example>
@@ -150,7 +150,7 @@ namespace MyProject; // fatal error - namespace must be the first statement in t
    sub-levels:
    <example>
     <title>Declaring a single namespace with hierarchy</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject\Sub\Level;
@@ -158,8 +158,6 @@ namespace MyProject\Sub\Level;
 const CONNECT_OK = 1;
 class Connection { /* ... */ }
 function connect() { /* ... */  }
-
-?>
 ]]>
     </programlisting>
    </example>
@@ -179,7 +177,7 @@ function connect() { /* ... */  }
   <para>
    <example>
     <title>Declaring multiple namespaces, simple combination syntax</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject;
@@ -193,7 +191,6 @@ namespace AnotherProject;
 const CONNECT_OK = 1;
 class Connection { /* ... */ }
 function connect() { /* ... */  }
-?>
 ]]>
     </programlisting>
    </example>
@@ -205,7 +202,7 @@ function connect() { /* ... */  }
   <para>
    <example>
     <title>Declaring multiple namespaces, bracketed syntax</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject {
@@ -221,7 +218,6 @@ const CONNECT_OK = 1;
 class Connection { /* ... */ }
 function connect() { /* ... */  }
 }
-?>
 ]]>
     </programlisting>
    </example>
@@ -243,16 +239,22 @@ function connect() { /* ... */  }
 namespace MyProject {
 
 const CONNECT_OK = 1;
-class Connection { /* ... */ }
-function connect() { /* ... */  }
+class Connection {
+    public static function start() {
+        print __METHOD__ . "\n";
+    }
+}
+
+function connect() {
+    print __FUNCTION__ . "\n";
+}
 }
 
 namespace { // global code
-session_start();
-$a = MyProject\connect();
-echo MyProject\Connection::start();
+print strlen("hi") . "\n";
+MyProject\connect();
+MyProject\Connection::start();
 }
-?>
 ]]>
     </programlisting>
    </example>
@@ -265,20 +267,26 @@ echo MyProject\Connection::start();
     <programlisting role="php">
      <![CDATA[
 <?php
-declare(encoding='UTF-8');
+declare(strict_types=1);
 namespace MyProject {
 
 const CONNECT_OK = 1;
-class Connection { /* ... */ }
-function connect() { /* ... */  }
+class Connection {
+    public static function start() {
+        print __METHOD__ . "\n";
+    }
+}
+
+function connect() {
+    print __FUNCTION__ . "\n";
+}
 }
 
 namespace { // global code
-session_start();
-$a = MyProject\connect();
-echo MyProject\Connection::start();
+print strlen("hi") . "\n";
+MyProject\connect();
+MyProject\Connection::start();
 }
-?>
 ]]>
     </programlisting>
    </example>
@@ -358,7 +366,7 @@ echo MyProject\Connection::start();
    Here is an example of the three kinds of syntax in actual code:
    <informalexample>
     <simpara>file1.php</simpara>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace Foo\Bar\subnamespace;
@@ -369,11 +377,10 @@ class foo
 {
     static function staticmethod() {}
 }
-?>
      ]]>
     </programlisting>
     <simpara>file2.php</simpara>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace Foo\Bar;
@@ -401,7 +408,6 @@ echo subnamespace\FOO; // resolves to constant Foo\Bar\subnamespace\FOO
 \Foo\Bar\foo(); // resolves to function Foo\Bar\foo
 \Foo\Bar\foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
 echo \Foo\Bar\FOO; // resolves to constant Foo\Bar\FOO
-?>
      ]]>
     </programlisting>
    </informalexample>
@@ -422,10 +428,10 @@ function strlen() {}
 const INI_ALL = 3;
 class Exception {}
 
-$a = \strlen('hi'); // calls global function strlen
-$b = \INI_ALL; // accesses global constant INI_ALL
+print \strlen('hi') . "\n"; // calls global function strlen
+print \INI_ALL . "\n"; // accesses global constant INI_ALL
 $c = new \Exception('error'); // instantiates global class Exception
-?>
+print $c::class . "\n";
      ]]>
     </programlisting>
    </example>
@@ -462,7 +468,6 @@ $obj = new $a; // prints classname::__construct
 $b = 'funcname';
 $b(); // prints funcname
 echo constant('constname'), "\n"; // prints global
-?>
     ]]>
     </programlisting>
    </example>
@@ -500,7 +505,6 @@ $b = '\namespacename\funcname';
 $b(); // also prints namespacename\funcname
 echo constant('\namespacename\constname'), "\n"; // prints namespaced
 echo constant('namespacename\constname'), "\n"; // also prints namespaced
-?>
     ]]>
     </programlisting>
    </example>
@@ -530,7 +534,6 @@ echo constant('namespacename\constname'), "\n"; // also prints namespaced
 namespace MyProject;
 
 echo '"', __NAMESPACE__, '"'; // outputs "MyProject"
-?>
 ]]>
     </programlisting>
    </example>
@@ -539,9 +542,7 @@ echo '"', __NAMESPACE__, '"'; // outputs "MyProject"
     <programlisting role="php">
      <![CDATA[
 <?php
-
 echo '"', __NAMESPACE__, '"'; // outputs ""
-?>
 ]]>
     </programlisting>
    </example>
@@ -549,7 +550,7 @@ echo '"', __NAMESPACE__, '"'; // outputs ""
    names, for instance:
    <example>
     <title>using __NAMESPACE__ for dynamic name construction</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject;
@@ -559,7 +560,6 @@ function get($classname)
     $a = __NAMESPACE__ . '\\' . $classname;
     return new $a;
 }
-?>
 ]]>
     </programlisting>
    </example>
@@ -570,7 +570,7 @@ function get($classname)
    equivalent of the <literal>self</literal> operator for classes.
    <example>
     <title>the namespace operator, inside a namespace</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace MyProject;
@@ -585,13 +585,12 @@ namespace\sub\func(); // calls function MyProject\sub\func()
 namespace\cname::method(); // calls static method "method" of class MyProject\cname
 $a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname
 $b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b
-?>
 ]]>
     </programlisting>
    </example>
    <example>
     <title>the namespace operator, in global code</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 
@@ -600,7 +599,6 @@ namespace\sub\func(); // calls function sub\func()
 namespace\cname::method(); // calls static method "method" of class cname
 $a = new namespace\sub\cname(); // instantiates object of class sub\cname
 $b = namespace\CONSTANT; // assigns value of constant CONSTANT to $b
-?>
 ]]>
     </programlisting>
    </example>
@@ -624,7 +622,7 @@ $b = namespace\CONSTANT; // assigns value of constant CONSTANT to $b
    Here is an example showing all 5 kinds of importing:
    <example>
     <title>importing/aliasing with the use operator</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace foo;
@@ -652,7 +650,6 @@ $a = new ArrayObject(array(1)); // instantiates object of class ArrayObject
 // without the "use ArrayObject" we would instantiate an object of class foo\ArrayObject
 func(); // calls function My\Full\functionName
 echo CONSTANT; // echoes the value of My\Full\CONSTANT
-?>
 ]]>
     </programlisting>
    </example>
@@ -667,14 +664,13 @@ echo CONSTANT; // echoes the value of My\Full\CONSTANT
    on the same line
    <example>
     <title>importing/aliasing with the use operator, multiple use statements combined</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 use My\Full\Classname as Another, My\Full\NSname;
 
 $obj = new Another; // instantiates object of class My\Full\Classname
 NSname\subns\func(); // calls function My\Full\NSname\subns\func
-?>
 ]]>
     </programlisting>
    </example>
@@ -684,7 +680,7 @@ NSname\subns\func(); // calls function My\Full\NSname\subns\func
    or constant names.
    <example>
     <title>Importing and dynamic names</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 use My\Full\Classname as Another, My\Full\NSname;
@@ -692,7 +688,6 @@ use My\Full\Classname as Another, My\Full\NSname;
 $obj = new Another; // instantiates object of class My\Full\Classname
 $a = 'Another';
 $obj = new $a;      // instantiates object of class Another
-?>
 ]]>
     </programlisting>
    </example>
@@ -702,7 +697,7 @@ $obj = new $a;      // instantiates object of class Another
    names are absolute, and unaffected by imports.
    <example>
     <title>Importing and fully qualified names</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 use My\Full\Classname as Another, My\Full\NSname;
@@ -711,7 +706,6 @@ $obj = new Another; // instantiates object of class My\Full\Classname
 $obj = new \Another; // instantiates object of class Another
 $obj = new Another\thing; // instantiates object of class My\Full\Classname\thing
 $obj = new \Another\thing; // instantiates object of class Another\thing
-?>
 ]]>
     </programlisting>
    </example>
@@ -740,7 +734,6 @@ function toGreenlandic()
 
     // ...
 }
-?>
 ]]>
      </programlisting>
     </example>
@@ -760,7 +753,7 @@ function toGreenlandic()
     statement.
    </para>
    <informalexample>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 
@@ -797,7 +790,7 @@ use const some\namespace\{ConstA, ConstB, ConstC};
    namespace.
    <example>
     <title>Using global space specification</title>
-    <programlisting role="php">
+    <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace A\B\C;
@@ -808,7 +801,6 @@ function fopen() {
      $f = \fopen(...); // call global fopen
      return $f;
 }
-?>
     ]]>
     </programlisting>
    </example>
@@ -832,10 +824,11 @@ namespace A\B\C;
 class Exception extends \Exception {}
 
 $a = new Exception('hi'); // $a is an object of class A\B\C\Exception
+var_dump($a::class);
 $b = new \Exception('hi'); // $b is an object of class Exception
+var_dump($b::class);
 
 $c = new ArrayObject; // fatal error, class A\B\C\ArrayObject not found
-?>
     ]]>
     </programlisting>
    </example>
@@ -865,7 +858,6 @@ if (is_array('hi')) { // prints "is not array"
 } else {
     echo "is not array\n";
 }
-?>
     ]]>
     </programlisting>
    </example>
@@ -994,7 +986,7 @@ if (is_array('hi')) { // prints "is not array"
   </para>
   <example>
    <title>Name resolutions illustrated</title>
-   <programlisting role="php">
+   <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 namespace A;
@@ -1054,7 +1046,6 @@ A\B::foo();   // calls method "foo" of class "B" from namespace "A\A"
 
 \A\B::foo();  // calls method "foo" of class "B" from namespace "A"
               // if class "A\B" not found, it tries to autoload class "A\B"
-?>
 ]]>
    </programlisting>
   </example>
@@ -1167,7 +1158,7 @@ A\B::foo();   // calls method "foo" of class "B" from namespace "A\A"
 <![CDATA[
 <?php
 $a = new \stdClass;
-?>
+print $a::class;
 ]]>
      </programlisting>
     </example>
@@ -1182,7 +1173,7 @@ $a = new \stdClass;
 <![CDATA[
 <?php
 $a = new stdClass;
-?>
+print $a::class;
 ]]>
      </programlisting>
     </example>
@@ -1198,14 +1189,16 @@ $a = new stdClass;
 <?php
 namespace foo;
 $a = new \stdClass;
+print $a::class . "\n";
 
-function test(\ArrayObject $parameter_type_example = null) {}
+function test(?\ArrayObject $parameter_type_example = null) {}
 
-$a = \DirectoryIterator::CURRENT_AS_FILEINFO;
+$a = \FilesystemIterator::CURRENT_AS_FILEINFO;
+print $a . "\n";
 
 // extending an internal or global class
 class MyException extends \Exception {}
-?>
+print MyException::class . "\n";
 ]]>
      </programlisting>
     </example>
@@ -1227,19 +1220,21 @@ namespace foo;
 class MyClass {}
 
 // using a class from the current namespace as a parameter type
-function test(MyClass $parameter_type_example = null) {}
+function test(?MyClass $parameter_type_example = null) {}
 // another way to use a class from the current namespace as a parameter type
-function test(\foo\MyClass $parameter_type_example = null) {}
+function test2(?\foo\MyClass $parameter_type_example = null) {}
 
 // extending a class from the current namespace
 class Extended extends MyClass {}
+print Extended::class . "\n";
 
 // accessing a global function
-$a = \globalfunc();
+$a = \strlen("test");
+print $a . "\n";
 
 // accessing a global constant
 $b = \INI_ALL;
-?>
+print $b . "\n";
 ]]>
      </programlisting>
     </example>
@@ -1256,14 +1251,13 @@ $b = \INI_ALL;
     and <literal>\Exception</literal> is <literal>Exception</literal>.
     <example>
      <title>Fully Qualified names</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 namespace foo;
 $a = new \my\name(); // instantiates "my\name" class
 echo \strlen('hi'); // calls function "strlen"
 $a = \INI_ALL; // $a is set to the value of constant "INI_ALL"
-?>
 ]]>
      </programlisting>
     </example>
@@ -1286,7 +1280,7 @@ $a = \INI_ALL; // $a is set to the value of constant "INI_ALL"
    <para>
     <example>
      <title>Qualified names</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 namespace foo;
@@ -1296,7 +1290,6 @@ $a = new my\name(); // instantiates "foo\my\name" class
 foo\bar::name(); // calls static method "name" in class "blah\blah\bar"
 my\bar(); // calls function "foo\my\bar"
 $a = my\BAR; // sets $a to the value of constant "foo\my\BAR"
-?>
 ]]>
      </programlisting>
     </example>
@@ -1319,7 +1312,7 @@ $a = my\BAR; // sets $a to the value of constant "foo\my\BAR"
    <para>
     <example>
      <title>Unqualified class names</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
 <![CDATA[
 <?php
 namespace foo;
@@ -1327,7 +1320,6 @@ use blah\blah as foo;
 
 $a = new name(); // instantiates "foo\name" class
 foo::name(); // calls static method "name" in class "blah\blah"
-?>
 ]]>
      </programlisting>
     </example>
@@ -1361,8 +1353,12 @@ use blah\blah as foo;
 
 const FOO = 1;
 
-function my() {}
-function foo() {}
+function my() {
+    print __FUNCTION__ . "\n";
+}
+function foo() {
+    print __FUNCTION__ . "\n";
+}
 function sort(&$a)
 {
     \sort($a); // calls the global function "sort"
@@ -1371,14 +1367,16 @@ function sort(&$a)
 }
 
 my(); // calls "foo\my"
-$a = strlen('hi'); // calls global function "strlen" because "foo\strlen" does not exist
+print strlen('hi') . "\n"; // calls global function "strlen" because "foo\strlen" does not exist
 $arr = array(1,3,2);
 $b = sort($arr); // calls function "foo\sort"
-$c = foo(); // calls function "foo\foo" - import is not applied
+var_dump($b);
+foo(); // calls function "foo\foo" - import is not applied
 
 $a = FOO; // sets $a to value of constant "foo\FOO" - import is not applied
+print $a;
 $b = INI_ALL; // sets $b to value of global constant "INI_ALL"
-?>
+print $b;
 ]]>
      </programlisting>
     </example>
@@ -1390,25 +1388,23 @@ $b = INI_ALL; // sets $b to value of global constant "INI_ALL"
     The following script combinations are legal:
     <informalexample>
      <simpara>file1.php</simpara>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace my\stuff;
 class MyClass {}
-?>
      ]]>
      </programlisting>
      <simpara>another.php</simpara>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace another;
 class thing {}
-?>
      ]]>
      </programlisting>
      <simpara>file2.php</simpara>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace my\stuff;
@@ -1417,7 +1413,6 @@ include 'another.php';
 
 use another\thing as MyClass;
 $a = new MyClass; // instantiates class "thing" from namespace another
-?>
      ]]>
      </programlisting>
     </informalexample>
@@ -1428,14 +1423,13 @@ $a = new MyClass; // instantiates class "thing" from namespace another
     in a separate file. However, the next example causes a fatal error on name conflict
     because MyClass is defined in the same file as the use statement.
     <informalexample>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
      <![CDATA[
 <?php
 namespace my\stuff;
 use another\thing as MyClass;
 class MyClass {} // fatal error: MyClass conflicts with import statement
 $a = new MyClass;
-?>
      ]]>
      </programlisting>
     </informalexample>
@@ -1454,7 +1448,6 @@ namespace my\stuff {
         class foo {}
     }
 }
-?>
      ]]>
      </programlisting>
     </informalexample>
@@ -1466,7 +1459,6 @@ namespace my\stuff {
 namespace my\stuff\nested {
     class foo {}
 }
-?>
      ]]>
      </programlisting>
     </informalexample>
@@ -1481,7 +1473,7 @@ namespace my\stuff\nested {
     there is a risk of unintended consequences:
     <example>
      <title>Dangers of using namespaced names inside a double-quoted string</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
       <![CDATA[
 <?php
 $a = "dangerous\name"; // \n is a newline inside double quoted strings!
@@ -1489,7 +1481,6 @@ $obj = new $a;
 
 $a = 'not\at\all\dangerous'; // no problems here.
 $obj = new $a;
-?>
       ]]>
      </programlisting>
     </example>
@@ -1506,7 +1497,7 @@ $obj = new $a;
     backslash will produce a fatal error if not found.
     <example>
      <title>Undefined constants</title>
-     <programlisting role="php">
+     <programlisting role="php" annotations="non-interactive">
       <![CDATA[
 <?php
 namespace bar;
@@ -1514,7 +1505,6 @@ $a = FOO; // produces notice - undefined constants "FOO" assumed "FOO";
 $a = \FOO; // fatal error, undefined namespace constant FOO
 $a = Bar\FOO; // fatal error, undefined namespace constant bar\Bar\FOO
 $a = \Bar\FOO; // fatal error, undefined namespace constant Bar\FOO
-?>
       ]]>
      </programlisting>
     </example>
@@ -1534,7 +1524,6 @@ namespace bar;
 const NULL = 0; // fatal error;
 const true = 'stupid'; // also fatal error;
 // etc.
-?>
       ]]>
      </programlisting>
     </example>