2009-10-06 4 views
71

Я вижу переменную $this в PHP все время, и я понятия не имею, для чего она используется. Я никогда лично его не использовал, и поисковые системы игнорируют $, и я в конечном итоге ищу слово «это».

Может ли кто-нибудь сказать мне, как переменная $ работает в PHP?

ответ

89

Это ссылка на текущий объект, который наиболее часто используется в объектно-ориентированном коде.

Пример:

<?php 
class Person { 
    public $name; 

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

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

Это сохраняет строку 'Jack', как свойство объекта, созданного.

+11

+1 к терминологии «текущему объект», поскольку он является более точным способом описать иногда неинтуитивное поведение '$ this'. –

+0

Пишите похожий пример кода в учебнике KillerPHP OOP :) http://www.killerphp.com/tutorials/php-objects-page-1/ – Edson

8

Это способ ссылки на экземпляр класса изнутри самого себя, как и многие другие объектно-ориентированные языки.

От PHP docs:

Псевдо-переменная $ это доступно , когда метод вызывается из контекста с объекта. $ это ссылка вызывающему объекту (обычно объекту , которому принадлежит метод, , но, возможно, другому объекту, если метод называется статическим из контекста вторичного объекта).

0

Это относится к экземпляру текущего класса, так как meder.

См. PHP Docs. Это объясняется в первом примере.

2

Когда вы создаете класс, у вас есть (во многих случаях) переменные экземпляра и методы (ака. Функции). $, это позволяет получить эти переменные экземпляра, чтобы ваши функции могли принимать эти переменные и делать то, что им нужно, делать с ними все, что вы хотите.

другой вариант примера 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 
25

Лучший способ узнать о $this переменной в PHP, чтобы спросить PHP, что это такое. Не спрашивайте нас, попросить компилятор:

print gettype($this);   //object 
print get_object_vars($this); //Array 
print is_array($this);   //false 
print is_object($this);   //true 
print_r($this);     //dump of the objects inside it 
print count($this);    //true 
print get_class($this);   //YourProject\YourFile\YourClass 
print isset($this);    //true 
print get_parent_class($this); //YourBundle\YourStuff\YourParentClass 
print gettype($this->container); //object 
+3

вы забыли несколько точек с запятой: D – smileBeda

9

Я знаю, что его старый вопрос, во всяком случае еще точного объяснения о $ это. $ этот в основном используется для ссылки на свойства класса.

Пример:

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 
2

$this является a reference to the calling object (как правило, объект, к которому принадлежит метод, но, возможно, другой объект, если метод вызывается статически из контекста вторичный объект).

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/>"; 
    } 
} 
?> 
+0

, пожалуйста, уточните его немного. –

4

Давайте посмотрим, что произойдет, если мы не будем использовать $ это и стараться иметь переменные экземпляра и конструктора аргументы с тем же именем с следующий фрагмент кода

<?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; 

?> 

это эхо «Том»

+2

Ваш код фрагменты одинаковы, или я чего-то не хватает? – Demento

+0

@Demento: да. Я исправил его, используя '$ this' во втором конструкторе. –