<object id="xwuag"></object>
      1. <tbody id="xwuag"><pre id="xwuag"><video id="xwuag"></video></pre></tbody>
        <progress id="xwuag"></progress>

        <nav id="xwuag"><big id="xwuag"><rt id="xwuag"></rt></big></nav>
        <em id="xwuag"></em>

        <nav id="xwuag"></nav><rp id="xwuag"></rp>
        <li id="xwuag"></li>
      2. <rp id="xwuag"></rp>
        <s id="xwuag"></s><th id="xwuag"><pre id="xwuag"><video id="xwuag"></video></pre></th>
      3. <nav id="xwuag"><center id="xwuag"></center></nav>
          <dd id="xwuag"><big id="xwuag"></big></dd>

          在同一个文件中定义多个命名空间

          (PHP 5 >= 5.3.0, PHP 7)

          也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。

          Example #1 定义多个命名空间,简单组合语法

          <?php
          namespace MyProject;

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }

          namespace 
          AnotherProject;

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }
          ?>

          不建议使用这种语法在单个文件中定义多个命名空间。建议使用下面的大括号形式的语法。

          Example #2 定义多个命名空间,大括号语法

          <?php
          namespace MyProject {

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }
          }

          namespace 
          AnotherProject {

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }
          }
          ?>

          在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。

          将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:

          Example #3 定义多个命名空间和不包含在命名空间中的代码

          <?php
          namespace MyProject {

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }
          }

          namespace { 
          // global code
          session_start();
          $a MyProject\connect();
          echo 
          MyProject\Connection::start();
          }
          ?>

          除了开始的declare语句外,命名空间的括号外不得有任何PHP代码。

          Example #4 定义多个命名空间和不包含在命名空间中的代码

          <?php
          declare(encoding='UTF-8');
          namespace 
          MyProject {

          const 
          CONNECT_OK 1;
          class 
          Connection /* ... */ }
          function 
          connect() { /* ... */  }
          }

          namespace { 
          // 全局代码
          session_start();
          $a MyProject\connect();
          echo 
          MyProject\Connection::start();
          }
          ?>
          add a note add a note

          User Contributed Notes 10 notes

          up
          59
          leaksin [ at ] gmail [ dot ] com
          5 years ago
          using of global namespaces and multiple namespaces in one PHP file increase the complexity and decrease readability of the code.
          Let's try not use this scheme even it's very necessary (although there is not)
          up
          26
          jigar dot vy at gmail dot com
          3 years ago
          <?php

          // You cannot mix bracketed namespace declarations with unbracketed namespace declarations - will result in a Fatal error

          namespace a;

          echo
          "I belong to namespace a";

          namespace
          b {
              echo
          "I'm from namespace b";
          }
          up
          17
          Rahul Sonar
          4 years ago
          <?php
          //Namespace can be used in this way also
          namespace MyProject {

          function
          connect() { echo "ONE";  }
             
          Sub\Level\connect();
          }

          namespace
          MyProject\Sub {
             
          function
          connect() { echo "TWO";  }
             
          Level\connect();
          }

          namespace
          MyProject\Sub\Level {
             
              function
          connect() { echo "THREE";  }   
              \
          MyProject\Sub\Level\connect(); // OR we can use this as below
             
          connect();
          }
          up
          8
          Ishan Fernando
          3 years ago
          //call same named function using namespace

          //food.php

          <?php
          namespace Food;

          require (
          'Apple.php');
          require(
          'Orange.php');

          use
          Apples;
          use
          Oranges;

           
          Apples\eat();
           
          Oranges\eat();
          ?>

          //Apple.php
          <?php
          namespace Apples;

          function
          eat()
          {
            echo
          "eat apple";
          }
          ?>

          //Orange.php
          <?php
          namespace Oranges;

          function
          eat()
          {
            echo
          "eat Orange";
          }
          ?>
          up
          3
          dominic_mayers at yahoo dot com
          2 years ago
          If you have the habit to always use the closing PHP tag "?>" in your test files, remember that with the bracketed syntax code outside the brackets, including new lines outside the PHP tags,  is not allowed.  In particular, even though PHP sees a new line after the closing tag  as a part of the line and eats it, some editors, such as  Gedit, Gvim, Vim and Nano in Ubuntu,  will  add yet another new line after this new line and this will create an error.
          up
          1
          maycon dot rodrigues1 at gmail dot com
          3 years ago
          Notice it's not allowed to mix bracketed namespace with unbracketed namespace declarations.

          <?php
          namespace MyTest;

          const
          TEST = 777;

          //in this way
          echo \MyTest\TEST . '<br />';

          //Or this way
          echo TEST . '<br />';

          namespace
          AnotherTest {

          const
          TEST = 555;

          echo \
          AnotherTest\TEST . '<br />';
          echo \
          MyTest\TEST;
          }
          ?>

          This code will issue a fatal error, like this: Fatal error: Cannot mix bracketed namespace declarations with unbracketed namespace declarations in C:\xampp\htdocs\teste2.php on line 11.
          up
          1
          dauser at daexample dot com
          1 year ago
          There are rational examples of where the ability to blend multiple namespaces into a single file is not only desirable but also absolutely necessary.  An example of where this ability is useful is over in the very popular phpseclib library where they are PSR-4 compliant but, in order to be compliant, they have to read a directory of files to know what classes are available so that the autoloader can load the correct files.  If they, instead, just bundled the defaults into one file using this mechanism already supported by PHP core, there would be no need to do extraneous scanning of the file system.

          That's just one legitimate use-case where strict compliance with PSRs gets in the way of good software development.
          up
          -1
          Luis Pessoa
          4 years ago
          Be careful with include combined to namespaces:

          file b.php
          <?php
             
          const WHERE_I_AM = 'I am in B';
             
              function
          i_am_in() {
                  \
          A\cr_echo(WHERE_I_AM);
              }
          ?>

          file c.php
          <?php
             
          namespace C {
                  const
          WHERE_I_AM = 'I am in C';
                 
                  function
          i_am_in() {
                      \
          A\cr_echo(WHERE_I_AM);
                  }
              }
          ?>

          main file

          <?php
            
             
          namespace A {
             
                  const
          CR = "\r\n";
                  const
          WHERE_I_AM = 'I am in A';
                 
                  function
          cr_echo($msg) {
                      echo
          $msg . CR;
                  }
                 
                  function
          i_am_in() {
                     
          cr_echo(WHERE_I_AM);
                  }
              }
             
              namespace
          B {
                  require
          'b.php';
              }
             
              namespace {
                  require
          'c.php';
                 
                  \
          A\i_am_in(); //ok
                 
          \B\i_am_in(); // fatal-error
                 
          \C\i_am_in(); //ok
             
          }
          ?>
          up
          -1
          martin_winkel at hotmail dot com
          2 years ago
          In addition to  kothnok at gmail dot com

          When using namespaces with brackets, you should define the USE statements within the brackets. His example sets the global use for the file.

          <?php

          namespace Space1;
          use
          SomeNamespace\FunctionCollection as FC;
          {
              
          FC\hello_world();
          }

          namespace
          Space2;
          {
              
          // This can be used here
              
          FC\hello_world();
          }
          ?>

          While the preferred method with brackets is this:
          <?php

          namespace Space1
          {
               use
          SomeNamespace\FunctionCollection as FC;
              
          FC\hello_world();
          }

          namespace
          Space2;
          {
              
          // This will not work now
              
          FC\hello_world();
          }
          ?>
          up
          -3
          dominic_mayers at yahoo dot com
          2 years ago
          With the bracketed syntax, a simple white space after the closing "?>" of the file, even a new line that is some times  considered as the end of a line and thus a part of the line, will (at the least in some php installations) be considered as code outside the brackets and will result in an error. It's general good practice to avoid white space after the closing "?>". Just pointing out that it is another case where it matters.

          備份地址:http://www.lvesu.com/blog/php/language.namespaces.definitionmultiple.php

          国产成人午夜福利r在线观看_欧美性受xxxx孕妇_白丝娇喘过膝袜爽短裙调教_jizz jizz xxxx