$ this 변수는 PHP에서 무엇을 의미합니까?


103

나는 $this항상 PHP 에서 변수 를보고 그것이 무엇에 사용되는지 전혀 모른다. 개인적으로 사용한 적이 없습니다.

누군가 $thisPHP 에서 변수 가 어떻게 작동 하는지 말해 줄 수 있습니까 ?

답변:


130

현재 객체에 대한 참조이며 객체 지향 코드에서 가장 일반적으로 사용됩니다.

예:

<?php
class Person {
    public $name;

    function __construct( $name ) {
        $this->name = $name;
    }
};

$jack = new Person('Jack');
echo $jack->name;

생성 된 객체의 속성으로 'Jack'문자열을 저장합니다.


1
KillerPHP OOP 튜토리얼에서 유사한 예제 코드를 보았습니다. :) killerphp.com/tutorials/php-objects-page-1
Edson

멋지고 쉬운 설명. @meder omuraliev
파이

40

$thisPHP 에서 변수에 대해 배우는 가장 좋은 방법 은 다양한 컨텍스트에서 인터프리터에 대해 시도하는 것입니다.

print isset($this);              //true,   $this exists
print gettype($this);            //Object, $this is an object 
print is_array($this);           //false,  $this isn't an array
print get_object_vars($this);    //true,   $this's variables are an array
print is_object($this);          //true,   $this is still an object
print get_class($this);          //YourProject\YourFile\YourClass
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this);                  //delicious data dump of $this
print $this->yourvariable        //access $this variable with ->

따라서 $this의사 변수에는 현재 개체의 메서드와 속성이 있습니다. 이러한 것은 클래스 내의 모든 멤버 변수와 멤버 메서드에 액세스 할 수 있기 때문에 유용합니다. 예를 들면 :

Class Dog{
    public $my_member_variable;                             //member variable

    function normal_method_inside_Dog() {                   //member method

        //Assign data to member variable from inside the member method
        $this->my_member_variable = "whatever";

        //Get data from member variable from inside the member method.
        print $this->my_member_variable;
    }
}

$thisObject인터프리터가 만든 PHP에 대한 참조 이며 변수 배열을 포함합니다.

$this일반 클래스의 일반 메서드 내부 를 호출하면 $this해당 메서드가 속한 Object (클래스)를 반환합니다.

그것은 가능의 $this상황에 부모 개체가없는 경우 undefined로.

php.net에는 PHP 객체 지향 프로그래밍과 $this컨텍스트에 따라 작동 하는 방식에 대한 큰 페이지가 있습니다. https://www.php.net/manual/en/language.oop5.basic.php


훌륭한 설명입니다. $ this는 현재 클래스의 속성에 액세스하는 데 도움이되는 의사 객체 / 변수로 처리 될 수 있다는 것을 추가하고 싶습니다.
S.Alvi

17

나는 그것의 오래된 질문, 어쨌든 $ this 에 대한 또 다른 정확한 설명을 알고 있습니다. $ this 는 주로 클래스의 속성을 참조하는 데 사용됩니다.

예:

Class A
{
   public $myname;    //this is a member variable of this class

function callme() {
    $myname = 'function variable';
    $this->myname = 'Member variable';
    echo $myname;                  //prints function variable
    echo $this->myname;              //prints member variable
   }
}

산출:

function variable

member variable

9

다른 많은 객체 지향 언어와 마찬가지로 자체 내에서 클래스의 인스턴스를 참조하는 방법입니다.

로부터 PHP 워드 프로세서 :

의사 변수 $ this는 객체 컨텍스트 내에서 메서드가 호출 될 때 사용할 수 있습니다. $ this는 호출 개체에 대한 참조입니다 (보통 메서드가 속한 개체이지만 메서드가 보조 개체의 컨텍스트에서 정적으로 호출되는 경우 다른 개체 일 수 있음).


7

$ this를 사용하지 않고 다음 코드 스 니펫을 사용하여 동일한 이름의 인스턴스 변수와 생성자 인수를 사용하면 어떻게되는지 살펴 보겠습니다.

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $name = $name;
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

아무것도 울리지 않는다

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $this->name = $name; // Using 'this' to access the student's name
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

이것은 'Tom'을 에코합니다.


2
코드 조각이 모두 똑같습니까? 아니면 뭔가 빠졌습니까?
Demento

@Demento : 네. $this두 번째 생성자에서 사용하여 수정했습니다 .
Axel Guilmin

왜 name = $ name이 학생의 이름에 액세스 할 수 없는지 설명해 주시겠습니까? 제게 말이 안 돼요.
Marco Floriano

마리오, 범위 때문이야. 함수 내부에는 $nameTom이 있지만 함수 외부에서는 범위가 함수의 범위로 제한되기 때문에 값이 없습니다.
dearsina

4

클래스를 만들 때 (대부분의 경우) 인스턴스 변수와 메서드 (일명 함수)가 있습니다. $ this는 해당 인스턴스 변수에 액세스하여 함수가 해당 변수를 가져와 원하는대로 수행 할 수 있도록합니다.

meder의 다른 버전 :

class Person {

    protected $name;  //can't be accessed from outside the class

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}
// this line creates an instance of the class Person setting "Jack" as $name.  
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack"); 

echo $jack->getName();

Output:

Jack


2

$ 이것은 특수 변수이며 동일한 객체를 참조합니다. 그 자체.

실제로 현재 클래스의 인스턴스를 참조합니다.

다음은 위의 진술을 지우는 예입니다.

<?php
 class Books {
  /* Member variables */
  var $price;
  var $title;

  /* Member functions */
  function setPrice($par){
     $this->price = $par;
  }

  function getPrice(){
     echo $this->price ."<br/>";
  }

  function setTitle($par){
     $this->title = $par;
  }

  function getTitle(){
     echo $this->title ." <br/>";
  }
}
?> 

조금 더 그것을 자세히 설명해
Neeraj Rathod에게

2

이것은 길고 자세한 설명입니다. 이것이 초보자에게 도움이되기를 바랍니다. 아주 간단하게 만들겠습니다.

먼저 클래스를 만들어 보겠습니다.

<?php 

class Class1
{
    
}

?>php 코드 만 사용하는 경우 php 닫기 태그를 생략 할 수 있습니다 .

이제 내부에 속성과 메서드를 추가해 보겠습니다 Class1.

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

속성은 단순한 변수이지만 클래스 내부에 속성 이름을 부여합니다.

이 메서드는 단순한 함수이지만 클래스 내부에도 메서드 cuz라고합니다.

그만큼 public 방법 또는 속성이 어디 스크립트에 액세스 할 수 있음을 의미 키워드.

이제 속성과 메서드를 사용하는 방법은 Class1 있습니까?

대답은 인스턴스 또는 객체를 만드는 것입니다. 객체를 클래스의 복사본으로 생각하십시오.

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

$object1 = new Class1;
var_dump($object1);

우리는 모든 내용 $object1이있는의 복사 본인 객체를 만들었습니다 Class1. 그리고 우리는의 모든 내용 덤프 $object1사용을 var_dump().

이것은 당신에게 줄 것입니다

object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }

따라서의 모든 내용 Class1은에 있습니다 $object1. 제외하고 Method1객체를 덤프하는 동안 메서드가 표시되지 않는 이유를 모르겠습니다.

이제 액세스 $property1만 원하면 어떨까요? 그것의 간단하고, 우리는하고 var_dump($object1->property1);, 방금 추가 ->property1했고, 우리는 그것을 지적했습니다.

우리가 접근도 할 수있는 Method1(), 우리가 할 var_dump($object1->Method1());.

이제 $property1내부 Method1()에서 액세스하고 싶다고 가정 합니다.

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {   
        $object2 = new Class1;
        return $object2->property1;
    }
}

$object1 = new Class1;
var_dump($object1->Method1()); 

우리 $object2 = new Class1;는 새로운 사본을 만들 Class1거나 인스턴스라고 말할 수 있습니다. 그런 다음 우리는 지적 property1에서$object2

return $object2->property1;

이것은 string(15) "I am property 1"브라우저에서 인쇄 됩니다.

이제 내부에서하는 대신 Method1()

$object2 = new Class1;
return $object2->property1;

우리는 이것을한다

return $this->property1;

$this객체는 클래스 자체를 참조하는 클래스 내에서 사용된다.

새 개체를 만든 다음 다음과 같이 반환하는 대안입니다.

$object2 = new Class1;
return $object2->property1;

다른 예시

<?php 

class Class1
{
    public $property1 = 119;
    public $property2 = 666;
    public $result;

    public function Method1()
    {   
        $this->result = $this->property1 + $this->property2;
        return $this->result;
    }
}

$object1 = new Class1;
var_dump($object1->Method1());

정수를 포함하는 2 개의 속성을 만든 다음 추가하고 결과를 $this->result.

잊지 마라

$this->property1= $property1=119

그들은 같은 가치가 있습니다 .. 등

나는 그것이 아이디어를 설명하기를 바랍니다.

이 비디오 시리즈는 OOP에서 많은 도움이 될 것입니다.

https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv


1

meder가 말했듯 이 현재 클래스의 인스턴스를 나타냅니다 .

PHP 문서를 참조하십시오 . 첫 번째 예에서 설명합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.