PHP.mk документација

Дефинирање на повеќе просторни имиња во иста датотека

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

language.namespaces.definitionmultiple.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека language.namespaces.definitionmultiple.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Дефинирање на повеќе просторни имиња во иста датотека

Референца за `language.namespaces.definitionmultiple.php` со подобрена типографија и навигација.

language.namespaces.definitionmultiple.php

Дефинирање на повеќе просторни имиња во иста датотека

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Повеќе имиња на простори може да се декларираат и во истата датотека. Постојат два дозволени синтакси.

Пример #1 Декларирање на повеќе имиња на простори, едноставна синтаксис за комбинација

<?php
namespace MyProject;

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

namespace
AnotherProject;

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

Оваа синтаксис не се препорачува за комбинирање на имиња на простори во една датотека. Наместо тоа, се препорачува да се користи алтернативната синтаксис со загради.

Пример #2 Декларирање на повеќе имиња на простори, синтаксис со загради

<?php
namespace MyProject {

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

namespace
AnotherProject {

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

Силно се обесхрабрува како практика за кодирање да се комбинираат повеќе имиња на простори во истата датотека. Главната употреба е да се комбинираат повеќе PHP скрипти во истата датотека.

За да се комбинира глобален код што не е во именски простор со код во именски простор, се поддржува само синтаксис со загради. Глобалниот код треба да биде затворен во изјава за именски простор без име на именски простор како во:

Пример #3 Декларирање на повеќе имиња на простори и код без именски простор

<?php
namespace MyProject {

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

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

Ниту еден PHP код не смее да постои надвор од заградите на именскиот простор освен почетна изјава за декларирање.

Пример #4 Декларирање на повеќе имиња на простори и код без именски простор

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

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

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

Белешки од корисници 6 белешки

leaksin [ at ] gmail [ dot ] com
12 години пред
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)
jigar dot vy at gmail dot com
пред 10 години
<?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";
}
Рахул Сонар
пред 11 години
<?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();
}
dominic_mayers на yahoo точка com
пред 9 години
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.
dauser at daexample dot com
пред 8 години
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.
Ишан Фернандо
пред 10 години
//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";
}
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.