Nice programing

“비 복합 이름이있는 use 문은… 효과가 없습니다.”문제 해결

nicepro 2020. 10. 12. 08:10
반응형

“비 복합 이름이있는 use 문은… 효과가 없습니다.”문제 해결


내가 use Blog;맨 위에 놓을 때이 오류가 발생 합니다.

경고 : 비 복합 이름 'Blog'를 사용하는 use 문은 ...

Blog Article, List 및 Category와 몇 가지 기능의 세 가지 클래스가있는 내 네임 스페이스입니다.

내 statememnt를 use Blog\Article;다음으로 변경 하면 작동합니다 ...

사용할 네임 스페이스 만 지정할 수 없습니까? 수업을 제공해야합니까?

해당 네임 스페이스 내에 함수가 있으면 어떻게합니까? 네임 스페이스 외부에서 호출하면 이름 앞에 \Blog\이름 을 붙여야 합니다.


PHP use는 C ++와 동일하지 않습니다 using namespace. 네임 스페이스를 "가져 오기"하지 않고 별칭 을 정의 할 수 있으므로 네임 스페이스 한정자를 모두 생략 할 수 있습니다.

따라서 다음을 수행 할 수 있습니다.

use Blog\Article as BA;

... 단축하기는하지만 완전히 제거 할 수는 없습니다.


결과적으로 use Blog쓸모가 없지만 다음과 같이 쓸 수 있다고 생각합니다.

use \ReallyLongNSName as RLNN;

\여기에 선행을 사용 하여 구문 분석기 ReallyLongNSName가 완전하게 인식 되도록 해야합니다 . 이는 Blog\Article이미 네임 스페이스 체인 인 에는 해당되지 않습니다 .

참고 네임 스페이스 이름을 (예 : 네임 스페이스 구분을 포함하는 정규화 된 네임 스페이스 이름 Foo\Bar 과 같은하지 않는 글로벌 이름, 반대로FooBar ), 선도 백 슬래시가 불필요 수입 이름은 완전해야하고, 처리되지 않기 때문에 권장하지 현재 네임 스페이스에 상대적입니다.


이 질문이이 오류에 대한 Google의 첫 번째 결과로 표시되므로 어떻게 수정했는지 설명하겠습니다.

기본적으로 Yii2와 같은 프레임 워크가있는 경우 다음과 같은 클래스를 선언해야하는 데 익숙해 질 것입니다.

use Yii;
use yii\db\WhatEver;

class AwesomeNewClass extends WhatEver
{
}

Use Yii이 클래스에는 네임 스페이스가 없기 때문에이 오류가 발생 합니다.

이 클래스에는 네임 스페이스가 없기 때문에 자동으로 전역 심볼 테이블을 상속하므로 이와 같은 정의가 필요하지 않으므로 제거하면됩니다.


usePHP명령문은 긴 네임 스페이스를 좀 더 읽기 쉬운 것으로 별칭을 지정하는 데 정말 편리합니다. 편의를 제공하는 것 외에도 실제로 개발에 영향을 미치는 파일이나 다른 작업을 포함하지 않습니다. , 이후 Blog아무것도 별명되지는 편의의 확보되지 않습니다. 나는 당신이 다음과 같은 것을 할 수 있다고 상상할 수 있습니다.

use \Blog as B;

그리고 그것은 작동 할 수도 있습니다. ( 모호하게함으로써 실제로 편의를 잃었다 고 주장 할 수 있지만 그게 문제가Blog 아닙니다.) 실제로 네임 스페이스를 다른 것으로 별칭을 지정하고 있기 때문 입니다. 사용 Blog\Article워드 프로세서에 따라 일을하기 때문에 :

// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;

따라서 스 니펫은 다음과 같습니다.

use Blog\Article as Article;

클래스 정의 전에 트레이 트를 사용하려고하면 "사용 문 ...은 효과가 없습니다 ..."라는 오류 메시지도 나타납니다.

use My_trait; // should not be here

class My_class{
// use My_trait; should be here instead
}

다음과 같은 'as'구문을 사용하지 않으려면

use \Blog as B;

파일에 대한 네임 스페이스 정의

namespace anyname;

use Blog

참고 URL : https://stackoverflow.com/questions/9317022/troubleshooting-the-use-statement-with-non-compound-name-has-no-effect

반응형