$ _data vs $ this - > _ data - PHP

I'm trying to figure out the difference between $_data vs $this->_data

class ProductModel
{

    var $_data = null; <--- defined here

    function test() 
    {
       $this->_data = <--- but it's accessed using $this
    }

}

I know in PHP var is used to define class properties but Why is it accessed using $this. Shouldn't it be like $this->$_data ? What's OOP concept is being used here ? Is it a PHP specific?

PHP along with several other popular programming languages such as Java (it's important to note that PHP's Object Oriented choices were at least partially inspired by Java) refer to the current object instance in context as this. You can think of this, (or $this in PHP) as the "current object instance."

Inside of class methods, $this refers to the current object instance.

A very small example using what you have above:

$_data = 'some other thing';
public function test() {
   $_data = 'something';
   echo $_data;
   echo $this->_data;
}

The above will output somethingsome other thing. Class members are stored along with the object instance, but local variables are only defined within the current scope.

No, it shouldn't. Since PHP can evaluate member names dynamically, the line

$this->$_data

refers to a class member, which name is specified in local $data variable. Consider this:

class ProductModel
{

    var $_data = null; <--- defined here

    function test() 
    {
       $member = '_data';
       $this->$member = <--- here you access $this->_data, not $this->member
    }

}

var $_data defines a class variable, $this->_data accesses it.

If you do $this->$foo it means something else, just like $$foo : if you set $foo = 'bar', those two expressions are respectively evaluated as $this->bar and $bar