Respostas:
É uma referência ao objeto atual, é mais comumente usado em código orientado a objetos.
Exemplo:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Isso armazena a string 'Jack' como uma propriedade do objeto criado.
$this
variável em PHP é testá-la no interpretador em vários contextos: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 ->
Portanto, a $this
pseudo-variável tem os métodos e propriedades do Objeto Atual. Isso é útil porque permite acessar todas as variáveis de membro e métodos de membro dentro da classe. Por exemplo:
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;
}
}
$this
é uma referência a um PHP Object
que foi criado pelo interpretador para você, que contém um array de variáveis.
Se você chamar $this
dentro de um método normal em uma classe normal, $this
retorna o Object (a classe) à qual esse método pertence.
É possível $this
ser indefinido se o contexto não tiver um objeto pai.
php.net tem uma grande página falando sobre programação PHP orientada a objetos e como $this
se comporta dependendo do contexto.
https://www.php.net/manual/en/language.oop5.basic.php
Eu conheço sua velha questão, de qualquer maneira outra explicação exata sobre $ this . $ this é usado principalmente para se referir a propriedades de uma classe.
Exemplo:
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
}
}
resultado:
function variable
member variable
É a forma de referenciar uma instância de uma classe de dentro dela mesma, da mesma forma que muitas outras linguagens orientadas a objetos.
Dos documentos PHP :
A pseudo-variável $ this está disponível quando um método é chamado de dentro de um contexto de objeto. $ this é uma referência ao objeto de chamada (normalmente o objeto ao qual o método pertence, mas possivelmente outro objeto, se o método for chamado estaticamente a partir do contexto de um objeto secundário).
Vamos ver o que acontece se não usarmos $ this e tentarmos ter variáveis de instância e argumentos de construtor com o mesmo nome com o seguinte trecho de código
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Não ecoa nada além
<?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;
?>
isso ecoa 'Tom'
$this
no segundo construtor.
$name
está Tom, mas fora da função não tem nenhum valor, pois seu escopo é limitado ao da função.
quando você cria uma classe, você tem (em muitos casos) variáveis de instância e métodos (também conhecidos como funções). $ this acessa essas variáveis de instância para que suas funções possam pegar essas variáveis e fazer o que precisam para fazer o que você quiser com elas.
outra versão do exemplo de 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
$this
é uma referência ao objeto de chamada (geralmente o objeto ao qual o método pertence, mas possivelmente outro objeto, se o método for chamado estaticamente a partir do contexto de um objeto secundário).
$ esta é uma variável especial e se refere ao mesmo objeto, ou seja. em si.
ele realmente se refere à instância da classe atual
aqui está um exemplo que irá limpar a declaração acima
<?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/>";
}
}
?>
Esta é uma explicação longa e detalhada. Espero que isso ajude os iniciantes. Vou tornar isso muito simples.
Primeiro, vamos criar uma classe
<?php
class Class1
{
}
Você pode omitir a tag de fechamento php ?>
se estiver usando apenas código php.
Agora vamos adicionar propriedades e um método dentro Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
A propriedade é apenas uma variável simples, mas damos a ela o nome de propriedade porque ela está dentro de uma classe.
O método é apenas uma função simples, mas dizemos método porque ele também está dentro de uma classe.
A public
palavra-chave significa que o método ou uma propriedade pode ser acessada em qualquer lugar no script.
Agora, como podemos usar as propriedades e o método interno Class1
?
A resposta é criar uma instância ou um objeto, pense em um objeto como uma cópia da classe.
<?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);
Criamos um objeto, que $object1
é uma cópia de Class1
todo o seu conteúdo. E despejamos todo o conteúdo do $object1
uso var_dump()
.
Isso vai te dar
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Portanto, todo o conteúdo de Class1
está dentro $object1
, exceto Method1
, não sei por que os métodos não aparecem durante o despejo de objetos.
Agora, e se quisermos $property1
apenas acessar . É simples, fazemos var_dump($object1->property1);
, acabamos de adicionar ->property1
, apontamos para ele.
também podemos acessar Method1()
, nós fazemos var_dump($object1->Method1());
.
Agora, suponha que eu queira acessar $property1
de dentro Method1()
, farei isso
<?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());
nós criamos $object2 = new Class1;
que é uma nova cópia de Class1
ou podemos dizer uma instância. Então apontamos para property1
de$object2
return $object2->property1;
Isso será impresso string(15) "I am property 1"
no navegador.
Agora, em vez de fazer isso por dentro Method1()
$object2 = new Class1;
return $object2->property1;
Nós fazemos isso
return $this->property1;
O $this
objeto é usado dentro da classe para se referir à própria classe.
É uma alternativa para criar um novo objeto e depois devolvê-lo assim
$object2 = new Class1;
return $object2->property1;
Outro exemplo
<?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());
Criamos 2 propriedades contendo inteiros e então os adicionamos e colocamos o resultado em $this->result
.
Não esqueça isto
$this->property1
= $property1
=119
eles têm o mesmo valor .. etc.
Espero que isso explique a ideia.
Esta série de vídeos vai te ajudar muito em OOP
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Refere-se à instância da turma atual, como disse meder .
Veja os documentos do PHP . É explicado no primeiro exemplo.