클래스 멤버나 메서드를 정적으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다. 정적으로 선언된 멤버는 인스턴스화된 클래스 개체로 액세스할 수 없습니다(정적 메서드는 가능함). 클래스 객체를 인스턴스화하지 않고도 변수와 메서드를 호출할 수 있습니다. 정적 클래스는 클래스 개체에서 호출할 수 없습니다. (클래스의 정적 메소드는 괜찮습니다). //첫 번째 예에 주목하세요. 정적 변수는 비정적 메서드에서 호출됩니다. 유일한 차이점은 자아를 사용한다는 것입니다. 셀프 사용이 가능한가요????모르겠어요???테스트가 필요합니다.
정적 선언은 가시성 선언 뒤에 와야 합니다. PHP4와의 호환성을 위해 가시성 선언이 사용되지 않으면 멤버 또는 메서드는 공개로 선언된 것처럼 처리됩니다.
정적 선언은 표시되어야 합니다. . 스타일 선언문. PHP4와 호환되기 위해 명시적으로 선언된 객체나 메소드가 없으면 public으로 선언된 것으로 간주됩니다.
정적 메서드는 생성된 개체의 인스턴스 없이 호출 가능하기 때문에 $this 의사 변수는 static으로 선언된 메서드 내에서 사용할 수 없습니다.
정적 메서드는 호출하기 위해 클래스 개체를 인스턴스화할 필요가 없기 때문에 의사 변수는 $this입니다. $ 변수는 정적 메소드에서도 사용할 수 없습니다.
실제로 정적 메서드 호출은 컴파일 타임에 해결됩니다. 명시적인 클래스 이름을 사용하면 메서드가 이미 완전히 식별되며 호출이 self에 의해 수행되면 self가 현재 클래스로 변환됩니다. 코드가 속한 클래스. 여기에도 상속 규칙이 적용되지 않습니다.
실제로 정적 메서드 호출은 컴파일 타임에 결정됩니다. (이 문단을 어떻게 번역해야할지 모르겠습니다.???이해가 안가네요???)
오래전부터 요청드린 번역은 다음과 같습니다.
------ ------------- ----------------
실제로 정적 호출은 메서드는 컴파일 타임에 해결됩니다. 명시적인 클래스 이름을 사용하면 상속 규칙을 적용할 필요 없이 메서드가 완전히 인식됩니다. 자체적으로 호출되는 경우 자체는 코드가 속한 클래스인 현재 클래스로 확인됩니다. 여기에도 상속 규칙이 적용되지 않습니다.
그러나 새로운 질문:
여기에는 상속이 없을 수 있는데 왜 상속 규칙이 언급됩니까? (???이해가 안 가네요????)
정적 속성은 다음을 사용하는 개체를 통해 액세스할 수 없습니다. 화살표 연산자 ->. 비정적 메서드를 호출하면 E_STRICT 수준 경고가 생성됩니다.
정적 멤버는 화살표 기호 ->를 통해 클래스의 개체에서 호출할 수 없습니다. 비정적 메서드에 대한 정적 호출은 E_STRICT 수준 경고를 발생시킵니다.
정적 멤버 예:
코드 복사 코드는 다음과 같습니다.
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;//여기에 주목하세요!!! > //return $my_static;//이렇게 쓰면 잘못된 걸까요? 테스트 필요
}
}
class Bar 확장 Foo
{
public function fooStatic() {
return parent::$my_static;//여기에 주목하세요!!!!
}
}
print Foo::$my_static . " n";
$foo = new Foo()
print $foo->staticValue() .
print $foo->my_static . " n"; // 정의되지 않은 "속성" my_static
// $foo::my_static은 불가능합니다
print Bar::$my_static . 🎜>$bar = new Bar();
print $bar->fooStatic() . " n";
정적 메소드 예:
class Foo {
public static function aStaticMethod()
이상은 내용의 측면을 포함하여 PHP의 기본 지식인 클래스 및 객체 5를 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.