스택큐힙리스트

'나 자신(self)'을 '$this' 대신 언제 사용해야 할까요? 본문

카테고리 없음

'나 자신(self)'을 '$this' 대신 언제 사용해야 할까요?

스택큐힙리스트 2023. 3. 23. 18:03
반응형

PHP 5에서 self와 $this를 사용하는 차이점은 무엇인가요?

각각은 언제 적절한가요?

답변 1

짧은 대답

현재 객체를 나타내기 위해 $this를 사용하세요. 현재 클래스를 나타내기 위해 self를 사용하세요. 다시 말해, 비정적 멤버에는 $this->member을 사용하고, 정적 멤버에는 self::$member을 사용하세요.

전체 답변

비정적 및 정적 멤버 변수에 대한 $this 및 self 올바른 사용 예제가 여기 있습니다.

class X {

private $non_static_member = 1;

private static $static_member = 2;

function __construct() {

echo $this->non_static_member . ' '

. self::$static_member;

}

}

new X();

?>

비정적 및 정적 멤버 변수에 대한 $this 및 self의 잘못된 사용 예가 여기에 있습니다.

class X {

private $non_static_member = 1;

private static $static_member = 2;

function __construct() {

echo self::$non_static_member . ' '

. $this->static_member;

}

}

new X();

?>

다음은 멤버 함수에 대한 $this과 함께 다형성 예시입니다.

class X {

function foo() {

echo 'X::foo()';

}

function bar() {

$this->foo();

}

}

class Y extends X {

function foo() {

echo 'Y::foo()';

}

}

$x = new Y();

$x->bar();

?>

멤버 함수에 self을 사용하여 다형성 동작을 억제하는 예제가 있습니다.

class X {

function foo() {

echo 'X::foo()';

}

function bar() {

self::foo();

}

}

class Y extends X {

function foo() {

echo 'Y::foo()';

}

}

$x = new Y();

$x->bar();

?>

아이디어는 현재 객체의 정확한 유형에 따라 foo() 멤버 함수를 호출하는 것입니다. 객체가 type X 유형이면 X::foo() 를 호출하므로, pe Y , it 유형이면 :foo() . But 를 호출합니다. 그러나 self::foo()를 사용하면 항상 X::foo() 가 호출됩니다.

http://www.phpbuilder.com/board/showthread.php?t=10354489에서:

http://board.phpbuilder.com/member.php?145249-laserlight로 인하여

답변 2

자바스크립트, PHP 및 다른 프로그래밍 언어의 객체 지향 프로그래밍에서 '$ this'와 'self'는 주요 키워드 중 하나입니다. 하지만 두 키워드 모두 객체 참조 변수입니다. 그래서 그 차이는 무엇이 있을까요?

먼저, PHP에서의 경우 '$ this'는 현재 인스턴스의 멤버 변수와 메소드를 사용할 수 있습니다. 따라서 '$ this'는 클래스 내에서 사용되며 클래스의 내부 구조에 직접 액세스해야 할 때 사용됩니다.

반면, 'self'는 클래스 자체를 참조합니다. 따라서 클래스 메소드 및 변수에 액세스하려는 경우에만 사용됩니다. 또한, 'self'는 정적 클래스 멤버에서도 사용됩니다.

그렇다면, 언제 'self' 대신 '$this'를 사용해야 할까요?

' $this'는 클래스의 인스턴스를 가리키며 인스턴스 변수와 메소드에 액세스할 수 있습니다. 특정 객체에 대한 작업을 수행할 때 사용됩니다. 예를 들어, 클래스 'Person'에 대한 예시를 들어보겠습니다.

class Person {

public $name;

public function intro() {

echo My name is .$this->name;

}

}

$obj1 = new Person;

$obj1->name = John;

$obj2 = new Person;

$obj2->name = Doe;

$obj1->intro(); // My name is John

$obj2->intro(); // My name is Doe

여기서 '$this'는 현재 객체를 나타냅니다. 결합도를 낮추고 코드를 재사용하기 위해 클래스 인스턴스와 의존성을 끊을 수 있습니다.

그러나 'self'는 클래스와 관련된 작업에만 사용됩니다. 예를 들어, 이름 변경 시에는 클래스 이름을 기반으로 제어를 제공하기 때문입니다.

class Person {

const USA = United States;

public static function printNationality() {

echo self::USA;

}

}

Person::printNationality(); // United States

여기서 'self'는 클래스 자체를 참조하기 때문에 정적 멤버에 접근할 수 있습니다. 정적 클래스 멤버에 대한 작업을 수행해야 하며 해당 클래스의 인스턴스가 필요하지 않은 경우에만 사용됩니다.

결론적으로, '$ this'와 'self'는 서로 다른 용도로 사용됩니다. '$this'는 특정 객체와 관련된 작업을 수행하는 데 사용되며 'self'는 클래스와 관련된 작업에 사용됩니다. 따라서 코딩 상황에 맞게 적절한 키워드를 사용해야 합니다.

반응형
Comments