programing

네임스페이스가 뭐죠?

goodsources 2023. 2. 2. 21:15
반응형

네임스페이스가 뭐죠?

PHP 네임스페이스란?

일반적으로 네임스페이스란 무엇입니까?

예를 들어 평신도의 답변이 좋을 것 같습니다.

네임스페이스는 함수 및 클래스에 대해 스코프가 변수에 대해 수행하는 것과 같은 역할을 합니다.이름 충돌을 일으키지 않고 동일한 프로그램의 다른 부분에서 동일한 함수 또는 클래스 이름을 사용할 수 있습니다.

간단히 말하면, 네임스페이스를 사람의 성이라고 생각하세요.만약 존이라는 이름의 두 사람이 있다면, 그들을 구별하기 위해 그들의 성을 사용할 수 있습니다.

시나리오

를 들어, '하다'라는 해 보겠습니다.output()의 . . . . . . . .output()함수는 페이지에 있는 모든 HTML 코드를 가져와서 사용자에게 보냅니다.

나중에 어플리케이션이 커지면 새로운 기능을 추가할 수 있습니다.RSS 피드를 생성할 수 있는 라이브러리를 추가합니다.은 또한 이이음음음음음음음음음 named named named named named named named named named named named named named named named named named named 라는 기능을 사용합니다.output()최종 피드를 출력합니다.

했을 때output()는 PHP를 알 수 output()RSS 의 RSS 를 지정합니다.output()기능하고 있습니까?그렇지 않아요.네임스페이스를 사용하는게 아니라면요

하면 두 개의 어학연수를 풀 수요?output()능하하??? ???붙인다, 붙인다, 붙인다.output()자체 네임스페이스에서 기능합니다.

그것은 다음과 같습니다.

namespace MyProject;

function output() {
    # Output HTML page
    echo 'HTML!';
}

namespace RSSLibrary;

function output(){
    # Output RSS feed
    echo 'RSS!';
}

나중에 다른 기능을 사용할 때는 다음을 사용합니다.

\MyProject\output();
\RSSLibrary\output();

네임스페이스를 네임스페이스라고 요.output():

namespace MyProject;

output(); # Output HTML page
\RSSLibrary\output();

네임스페이스가 없어요?

네임스페이스가 없다면 라이브러리를 추가할 때마다 많은 코드를 변경하거나 함수 이름을 고유하게 만들기 위해 지루한 접두사를 사용해야 합니다.네임스페이스를 사용하면 서드파티 코드를 자사 프로젝트와 혼재시킬 때 발생하는 이름 충돌 문제를 피할 수 있습니다.

네임스페이스를 사용하면 여러 코드를 이름 아래에 배치할 수 있으며 클래스, 함수 및 상수와 이름 경합이 발생하지 않습니다.

이 네임스페이스에서 코드를 사용할 수 있습니다.

PHP는 다소 논란이 많은 문자를 사용합니다. \네임스페이스 수준을 표시합니다.탈옥 캐릭터로도 쓰이기 때문에 사람들은 무기를 들고 일어섰다.

PHP의 네임스페이스를 사용하려면 파일 상단에 이와 같은 것을 사용하십시오.

namespace my\namespace;

네임스페이스에 대한 공식 PHP 설명서에서 더 많은 정보를 찾을 수 있습니다.

「네임스페이스」를 알면, 「사용」의 키워드를 알기 쉽기 때문에, 우선 기본적인 라라벨 프로젝트를 보고, 네임스페이스를 설명하겠습니다.

다음과 같은 이름의 컨트롤러 클래스가 있습니다.컨트롤러php프로젝트의 루트 디렉토리에서 app/Http/Controllers 경로에 있습니다.또, 다음의 컨트롤러 클래스도 있습니다.controller.php. 단, 이것은 패스 내에 있습니다.vendor / larabel / framework / src / Iluminate / routing from project root directory

php를 처음 접하는 경우에는 아직 소스 코드를 볼 필요가 없습니다.그 대신, 우리가 신경 쓰는 부분과 "네임스페이스"와 "사용"을 이해하는 데 도움이 되는 부분을 설명해 드리겠습니다.

따라서 실제로 첫 번째 컨트롤러 클래스인 app/Http/Controller/Controller.php에서는 중요한 라우팅 기능을 처리하기 위해 두 번째 컨트롤러 클래스의 벤더/larabel/framework/src/Iluminate/Routing/Controller.php를 사용해야 합니다.

그렇다면 어떻게 같은 이름을 가진 다른 클래스를 확장할 수 있을까요? class Controller extends Controller? 이 두 클래스를 구별할 수 있는 방법이 없는 한 방법은 작동하지 않습니다.namespace하기 쉽고, 「」의use키워드를 지정하면, 같은 스코프에서 같은 이름의 (methods, methods, interfaces 및 constants)를 사용할 수 있기 때문에, 미션을 완료할 수 있습니다.

이제 코드에서는 어떻게 되나요?/Http/Controller/Controller를 보면 매우 간단합니다.php 소스 코드는 클래스 네임스페이스의 맨 위에 다음과 같이 선언되어 있는 것을 알 수 있습니다.namespace App\Http\Controllers할 수 클래스 디렉토리에서 이 「하다」의프로젝트 루트 디렉토리에서 이 클래스에 대한 경로와 거의 차이가 없습니다.그것이 "의 사용법입니다.\가 ""입니다./(윈도의 명령어프롬프트와 동일하지만) 또 다른 차이점은 네임스페이스에 대문자 'A'가 있는 앱과 경로에 소문자 'a'가 있는 앱입니다.또한 네임스페이스는 대소문자를 구분합니다.

따라서 네임스페이스는 경로와는 별개의 개념으로 도움이 되는 경우 경로 구조를 따를있지만 클래스, 메서드, 인터페이스 또는 상수에 대한 정확한 경로일 필요는 없습니다(: 벤더/larabel/framework/src/Illumate/Routing/Controller).php 소스 코드,

맨 것을 볼 수 .Illuminate\Routing

'아, 아, 아, 아, 아, 아use " " " 키키키, 、 "use시키기 위한 "입니다.

Import하거나 포함하는 것은 없습니다.클래스나 메서드를 네임스페이스에서 참조함으로써 클래스나 메서드를 사용하는 것을 클래스에게 알릴 뿐입니다./Http/컨트롤러/컨트롤러를 살펴보겠습니다.에서 볼 수 있듯이 php 소스 코드:use Illuminate\Routing\Controller as BaseController", ",use키워드 에 타겟클래스의 네임스페이스가 표시됩니다(Illuminate\에 주의).라우팅\컨트롤러php 및 Illuminate\라우팅\컨트롤러 '.php 확장자 없음'은 교환 가능)

어울리다'를 할 수 요.as를 지정합니다use키워드: 특정 클래스, 메서드, 인터페이스 또는 상수에 앱/Http/컨트롤러/컨트롤러를 허용하는 별칭을 지정합니다.php를 사용하여 Illuminate\를 확장합니다.라우팅\컨트롤러php를 BaseController로 지정합니다.class Controller extends BaseController

다른 프로그래밍 언어의 네임스페이스(Java의 패키지)와 같은 기술이 있습니다.그들은 프로젝트와 함께 같은 이름의 여러 클래스를 가질 수 있습니다.

php 매뉴얼(http://www.php.net/manual/en/language.namespaces.rationale.php):

네임스페이스가 뭐죠?가장 넓은 정의에서 네임스페이스는 항목을 캡슐화하는 방법입니다.이것은 많은 곳에서 추상적인 개념으로 볼 수 있다.예를 들어 운영 체제 디렉터리는 관련 파일을 그룹화하는 역할을 하며, 해당 디렉터리에 포함된 파일의 네임스페이스 역할을 합니다.구체적인 예로는 파일 foo가 있습니다.txt는 /home/greg 디렉토리와 /home/other에 모두 존재할 수 있지만 foo의 복사본은 2개입니다.txt는 같은 디렉토리에 공존할 수 없습니다.게다가 foo에 접속하기 위해서./home/greg 디렉토리 밖에 있는 txt 파일에서는 디렉토리 구분자를 사용하여 디렉토리 이름 앞에 디렉토리 이름을 추가하여 /home/greg/foo.txt를 가져와야 합니다.이 원리는 프로그래밍 세계의 네임스페이스에도 적용됩니다.

네임스페이스는 디렉토리처럼 작동합니다.부모(또는 다른) 디렉토리의 파일과 같은 이름의 디렉토리에 파일을 넣는 방법을 알고 계십니까?네임스페이스를 사용하면 변수, 함수 및 클래스에 대한 응용 프로그램에서 이를 수행할 수 있습니다.

조금 전에 PHP에 거대한 정적 함수의 경향이 있었습니다.이러한 함수를 호출하는 유일한 방법은 콜에 클래스 이름을 붙이는 것이었습니다.이것은 네임스페이스에 대한 원시적인 시도였지만, 그다지 많은 이점이 없었다.

디렉토리파일과 마찬가지로 PHP의 네임스페이스는 클래스, 함수, 인터페이스 상수를 그룹화하는 역할을 합니다.

예:

Filesystem      |   PHP Namespace
----------------|------------------
/Dir/File.txt   |  \Namespace\Class

글로벌 공간에서 항목을 래핑하는 방법을 제공하며 프로그램에서 이름 충돌 없이 일반 항목 이름을 사용할 수 있습니다.PHP 5.3.0, PHP 7에서 지원됩니다.

그러나 PHP 네임스페이스와 Unix 기반 파일 시스템 사이에는 다음과 같은 몇 가지 제한이 있습니다.

                          | Filesystem            |        PHP Namespace
--------------------------|-----------------------|-------------------------
Cas sensitive             |       No              |        Yes                
--------------------------|-----------------------|-------------------------
Name with plain number    |       Yes             |        No
--------------------------|-----------------------|-------------------------
Path level                |       Yes             |        Yes   
--------------------------|-----------------------|-------------------------
Plain metacharacters name |       Yes             |        No        

이 원리는 프로그래밍 워드의 네임스페이스까지 확장됩니다.

네임스페이스는 많은 것을 하나의 팩으로 패키징하는 것과 같습니다.네임스페이스는 연필, 자, 종이 등 모든 것을 넣을 수 있는 서랍이라고 상상해 보세요.서로의 물건을 사용하지 않기 위해 서랍에 라벨을 붙이기로 결정함으로써 어떤 것이 누구의 것인지 명확히 알 수 있습니다.

네임스페이스를 사용하면 기본적으로 컨테이너에 코드를 넣을 수 있습니다.이것에 의해, 같은 이름을 공유하는 2개의 함수(클래스나 변수)에 문제가 발생하는 것을 방지할 수 있습니다.

이것은, 같은 이름을 공유하는 코드 조각의 문제를 막기 위해서, 큰 애플리케이션을 조작하는 경우에 편리합니다.

예를 들어, "The Message"라고 불리는 두 가지 기능을 사용한다고 가정합니다.양쪽 모두 다른 메시지를 인쇄(에코)합니다.일반적으로 동일한 이름을 공유하는 두 함수는 사용할 수 없기 때문에 구문 오류가 발생합니다.

이 문제를 해결하려면 이러한 기능을 별도의 네임스페이스에 넣을 수 있습니다.이렇게 하면 오류 없이 두 기능을 모두 사용할 수 있습니다.

네임스페이스는 이름 충돌 없이 다른 장소에서 사용할 수 있도록 코드 그룹을 둘러싸는 데 사용됩니다.이를 jQuery no conflict 메서드로 생각하면 더 잘 이해할 수 있습니다.

네임스페이스는 프로그램의 이름을 제어하는 간단한 시스템입니다.
그러면 이름이 고유하고 충돌이 발생하지 않습니다.

네임스페이스를 사용하여 작성한 코드와 내부 PHP 클래스/함수/정수 또는 서드파티 클래스/함수/정수 간의 이름 충돌을 방지할 수 있습니다.네임스페이스에는 첫 번째 문제를 줄이기 위해 설계된 Extra_Long_Names 에일리어스(또는 단축) 기능이 있어 소스 코드의 가독성을 향상시킵니다.

아시다시피, 네임스페이스와 특성은 PHP에서 새로운 것이 아니지만, 여전히 많은 php 개발자들은 복잡하기 때문에 이러한 위대한 개념을 사용하지 않습니다.그래서 이 글에서.예를 들어 설명하겠습니다.네임스페이스와 특성은 무엇입니까?

코드를 재사용 및 확장하기 위해 코드에 이러한 코드를 구현하려면 어떻게 해야 합니까?

네임스페이스의 장점

네임스페이스를 사용하여 작성한 코드와 내부 PHP 클래스/함수/정수 또는 서드파티 클래스/함수/정수 간의 이름 충돌을 방지할 수 있습니다.

네임스페이스에는 첫 번째 문제를 줄이기 위해 설계된 Extra_Long_Names 에일리어스(또는 단축) 기능이 있어 소스 코드의 가독성을 향상시킵니다.예를 들어 네임스페이스에 대해 설명하겠습니다.htdocs(xampp) 또는 www(xwamp)에 폴더 이름 "php_oops"를 만들고 "namspaces"라는 루트 디렉토리에 새 폴더를 만든 다음 네임스페이스 폴더 아래에 파일 index.php를 만듭니다.

<?php
// FilePath:- namespaces/index.php

// let's say, we have two classes in index,
// here, these two classes have global space
class A 
{ 
   function __construct()
   { 
      echo "I am at Global space, Class A";
   }
}
class B
{
   function __construct()
   {
      echo "I am at Global space, Class B";
   }
}
// now create an object of class and 
$object = new A; // unqualified class name
echo "<br/>";
$object = new \B; // fully qualified class name
// output: 
I am at Global space, Class A
I am at Global space, Class B

레퍼런스 - https://medium.com/ @akgarg007/http-laravel-namspaces-and-http-01-9540fe2969cb

리소스 이름을 붙여야 하는 경우가 많습니다.이러한 라벨은 리소스 이름을 이해하고 설명하는 데 도움이 됩니다.그러나 이름 짓기는 단순히 일련의 문자를 할당하는 단순한 작업이 아닙니다.이름은 한 가지를 다른 것과 구별하는 역할을 한다.

식별자가 단일 리소스를 참조하더라도 동일한 두 식별자가 없는 것은 아닙니다.

GUID 또는 네임스페이스에 대한 정보를 추가하여 식별자 충돌을 방지하거나 줄일 수 있습니다.네임스페이스는 이름 또는 식별자를 선택하는 도메인입니다.식별자에 네임스페이스를 추가하면 정규화된 이름이 생성됩니다.

시간 예!

밖에 JOHN_SMITH99501이라고 합니다.도 하나밖에 요.JOHN_SMITH86302번입니다.'아까'라고 하면 '아까'라고 하면요.JOHN_SMITH 「 「 」의 어느 쪽이 「 」인지 어떻게 하면 요?JOHN_SMITH슨슨 얘기 ?? ???

컨텍스트에서 할 때 "99501"을 합니다.JOHN_SMITH '어느 때 보다'에 를 하고 있습니다.JOHN_SMITH99501번

<?php

namespace zc99501;

const JOHN_SMITH = "John Smith from 99501";

?>

할 때 86302를 합니다.JOHN_SMITH '어느 때 보다'에 를 하고 있습니다.JOHN_SMITH86302번

<?php

namespace zc86302;

const JOHN_SMITH = "John Smith from 86302";

?>

한이 86302의 '99501'에 대해 할까요?JOHN_SMITH 해야 요.JOHN_SMITH부터 99501까지JOHN_SMITH86302입니다.

<?php

namespace zc99501;

const JOHN_SMITH = "John Smith from 99501";

namespace zc86302;

const JOHN_SMITH = "John Smith from 86302";

namespace Test;

echo \zc99501\JOHN_SMITH . PHP_EOL;
echo \zc86302\JOHN_SMITH . PHP_EOL;

?>

서서,,\zc99501\JOHN_SMITH ★★★★★★★★★★★★★★★★★」\zc86302\JOHN_SMITH정규화된 이름입니다.

다른 예.

, 어떤 에서는 「」를 의미한다고 합니다.Book TitletitleAuthor Name★★★★★★★★★★★★★★★★의name.

<?php

namespace Book;

const title = "Don Quixote";
const name = "Miguel de Cervantes Saavedra";

?>

, 우리는 른을 의미한다.Title of a Character타타에 title★★★★★★★...Character's Name★★★★★★★★★★★★★★★★의name.

<?php

namespace Character;

const title = "Sir";
const name = "Sancho Panza";

?>

가 때title ★★★★★★★★★★★★★★★★★」name문맥이든 .Book Title ★★★★★★★★★★★★★★★★★」Title of a Character또.Author Name ★★★★★★★★★★★★★★★★★」Character's Name.

<?php

namespace Book;

const title = "Don Quixote";
const name = "Miguel de Cervantes Saavedra";

namespace Character;

const title = "Sir";
const name = "Sancho Panza";

namespace Test;

echo \Book\title . PHP_EOL;
echo \Book\name . PHP_EOL;
echo \Character\title . PHP_EOL;
echo \Character\name . PHP_EOL;

?>

서서,,\Book\title,\Book\name,\Character\title ★★★★★★★★★★★★★★★★★」\Character\name정규화된 이름입니다.

주의: PHP에서는 네임스페이스의 영향을 받는 코드는 클래스, 인터페이스, 함수 및 상수 4종류뿐입니다.

바로 그거야.

언급URL : https://stackoverflow.com/questions/3384204/what-are-namespaces

반응형