네임스페이스가 뭐죠?
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_SMITH
99501이라고 합니다.도 하나밖에 요.JOHN_SMITH
86302번입니다.'아까'라고 하면 '아까'라고 하면요.JOHN_SMITH
「 「 」의 어느 쪽이 「 」인지 어떻게 하면 요?JOHN_SMITH
슨슨 얘기 ?? ???
컨텍스트에서 할 때 "99501"을 합니다.JOHN_SMITH
'어느 때 보다'에 를 하고 있습니다.JOHN_SMITH
99501번
<?php
namespace zc99501;
const JOHN_SMITH = "John Smith from 99501";
?>
할 때 86302를 합니다.JOHN_SMITH
'어느 때 보다'에 를 하고 있습니다.JOHN_SMITH
86302번
<?php
namespace zc86302;
const JOHN_SMITH = "John Smith from 86302";
?>
한이 86302의 '99501'에 대해 할까요?JOHN_SMITH
해야 요.JOHN_SMITH
부터 99501까지JOHN_SMITH
86302입니다.
<?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 Title
를 title
Author 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
'programing' 카테고리의 다른 글
Lombok @Builder 및 JPA 기본 생성자 (0) | 2023.02.02 |
---|---|
자동 완성을 위해 MYSQL과 PHP의 회사 이름을 애매하게 일치시키는 방법은 무엇입니까? (0) | 2023.02.02 |
포함할 PHP pass 변수 (0) | 2023.02.02 |
단일 쿼리의 여러 선택 문 (0) | 2023.02.02 |
MariaDB: 계산된 열을 사용한 계산 (0) | 2023.02.02 |