>백엔드 개발 >PHP 튜토리얼 >PHP에서 self와 static의 차이점에 대한 자세한 설명

PHP에서 self와 static의 차이점에 대한 자세한 설명

小云云
小云云원래의
2018-03-31 09:59:191759검색

PHP에서 self 키워드는 현재 클래스를 나타낼 수 있으며 일반적으로 현재 클래스의 정적 메서드나 정적 속성을 호출하는 데 사용됩니다. 그러나 static 속성을 정의할 수 있는 것 외에도 static에는 self(현재 클래스를 나타냄)와 유사한 기능도 있습니다.

하지만 둘 사이에는 여전히 일정한 차이가 있습니다.

<?php
header("Content-Type:text/html;charset=utf-8");
Class A{
	public static $p1=1;
	public $p2=2;
	public static function showInfo(){
		echo "<br/>".self::$p1;
	}
	public static function showInfo2(){
		echo "<br/>".static::$p1;
	}
}
Class B extends A{
	static $p1=10;//此处覆盖继承过来的变量p1.
	public $p2=20;
	
}
A::showInfo();
echo "<br/>";
B::showInfo();
echo "<hr/>";
A::showInfo2();
echo "<br/>";
B::showInfo2();

결과에서 볼 수 있습니다.

showInfo() 메서드가 호출되면 출력 개체는 self입니다. ::$p1 . 이때, 클래스 B가 클래스 A를 상속하고, 상속된 메소드가 클래스 B에서 호출되더라도 표시되는 것은 항상 self 키워드가 위치한 클래스입니다. 따라서 self가 표현하는 현재 클래스는 주로 현재 코드가 위치한 클래스라고 할 수 있다.

showInfo2() 메소드가 호출되면 출력 객체는 static::$p1입니다. 이때 출력 결과가 다릅니다. 클래스 A는 호출하는 속성을 출력합니다. B는 또한 자신이 호출하는 속성(클래스 A의 메서드를 상속한 후 덮어쓰는 $p2 값)을 출력합니다. 따라서 static은 현재 메서드가 호출되는 클래스를 나타냅니다.

따라서 self와 static 모두 현재 클래스를 나타낼 수 있지만 그 의미는 다릅니다.

관련 권장 사항:

PHP 객체 지향에서 자체와 정적의 차이점

위 내용은 PHP에서 self와 static의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.