PHP에서 클래스와 메소드를 외부에서 정적으로 호출할 수 없는 이유는 무엇입니까?

PHPz
풀어 주다: 2023-03-24 17:52:01
원래의
1279명이 탐색했습니다.

PHP는 간결하고 사용하기 쉬운 구문, 빠른 개발 속도 및 여러 데이터베이스 지원이 특징으로 널리 사용되는 프로그래밍 언어입니다. 그러나 일부 PHP 개발자는 클래스와 메서드를 외부에서 정적으로 호출할 수 없다는 문제에 직면할 수 있습니다. 이 기사에서는 이 문제를 살펴보고 해결책을 제시할 것입니다.

정적 통화란 무엇인가요?

PHP 개발에서 정적 호출은 객체를 인스턴스화하지 않고 클래스나 메서드를 직접 호출하는 방법입니다. 샘플 코드는 다음과 같습니다.

class Car{
   public static function run(){
      echo "the car is running";
   }
}

// 静态调用
Car::run();
로그인 후 복사

위에서 언급했듯이 정적 호출은 클래스 이름과 이중 콜론 연산자를 사용하여 클래스 멤버(메서드 또는 속성)에 액세스하는 방법입니다.

왜 외부에서는 정적으로 호출할 수 없나요?

PHP에서 외부적으로 정적으로 호출할 수 없는 주된 이유는 액세스 수정자의 제한 때문입니다. private 또는 protected 한정자를 사용하여 클래스나 메서드를 정의한 경우 해당 멤버는 클래스 내에서만 액세스할 수 있습니다. 따라서 외부에서 호출되면 PHP 인터프리터는 해당 액세스 요청을 거부합니다. privateprotected修饰符进行定义,则只有在类内部才能够访问其中的成员。因此,在外部调用时,PHP解释器将拒绝相应的访问请求。

解决方案:

如果想要在外部静态地调用类或方法,需要将它们定义为公共的(使用public

해결책:

클래스나 메서드를 외부에서 정적으로 호출하려면 이를 공개로 정의해야 합니다( public 한정자를 사용하여). 예를 들어, 다음과 같이 정의할 수 있는 공개 정적 메서드 myMethod가 있는 MyClass라는 클래스가 있다고 가정해 보겠습니다.

class MyClass{
   public static function myMethod(){
      echo "Hello World!";
   }
}
로그인 후 복사
클래스에서 메서드를 정의한 후 클래스 이름으로 어디서나 직접 호출할 수 있으며 거기에 이 클래스를 인스턴스화할 필요가 없습니다. 예를 들어, 다른 PHP 파일에서는 다음과 같이 메소드를 호출할 수 있습니다.

MyClass::myMethod();
로그인 후 복사
또한 정적 액세스에 리플렉션 API를 사용할 수도 있습니다. Reflection API는 PHP가 실행되는 동안 클래스와 객체에 대한 정보를 얻는 데 사용할 수 있는 강력한 도구입니다. 다음 코드는 리플렉션 API를 사용하여 클래스를 정적으로 인스턴스화하고 해당 메서드를 호출하는 방법을 보여줍니다.

class Example{
   public function run(){
       echo "example code";
   }
}

// 使用反射API静态地调用run()函数
$class = new ReflectionClass('Example');
$method = $class->getMethod('run');
$method->invoke(null);
로그인 후 복사
위 코드 예제에서는 ReflectionClass 클래스와 getMethod() 메서드를 활용하여 run() 메서드에 대한 참조를 얻습니다. 그런 다음, Invoke() 메서드를 사용하여 메서드를 호출합니다. 여기에서는 예제 클래스를 인스턴스화할 필요가 없으므로 호출()에 null 값이 전달됩니다.

결론

🎜🎜PHP 개발에서는 클래스나 메소드에 대한 외부 정적 호출이 액세스 한정자에 의해 제한될 수 있습니다. 이 문제를 해결하려면 클래스나 메서드를 공용으로 정의하고 클래스 이름과 이중 콜론 연산자를 사용하여 클래스 멤버에 액세스해야 합니다. 또한 리플렉션 API를 정적 액세스에도 사용할 수 있습니다. 이 정보를 알면 개발자가 PHP의 강력한 기능을 더 잘 활용하는 데 도움이 될 수 있습니다. 🎜

위 내용은 PHP에서 클래스와 메소드를 외부에서 정적으로 호출할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿