일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 네트워크
- I'm Sorry
- 코딩
- 컴퓨터비전
- 버전관리
- 머신러닝
- 프로그래밍언어
- 알고리즘
- 데이터분석
- 데이터베이스
- 보안
- 딥러닝
- Yes
- 프로그래밍
- 데이터구조
- 네트워크보안
- 소프트웨어
- 클라우드컴퓨팅
- 데이터과학
- 파이썬
- 인공지능
- 소프트웨어공학
- 자료구조
- 컴퓨터과학
- 빅데이터
- 웹개발
- 2
- 컴퓨터공학
- 사이버보안
- 자바스크립트
- Today
- Total
스택큐힙리스트
'나 자신(self)'을 '$this' 대신 언제 사용해야 할까요? 본문
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'는 클래스와 관련된 작업에 사용됩니다. 따라서 코딩 상황에 맞게 적절한 키워드를 사용해야 합니다.