Answers:
它是对当前对象的引用,在面向对象的代码中最常用。
例:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
这会将'Jack'字符串存储为所创建对象的属性。
$this
PHP中变量的最好方法是在各种情况下针对解释器进行尝试: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;
}
}
$this
是对Object
由解释器为您创建的PHP的引用,该PHP 包含变量数组。
如果$this
在普通类中的普通方法内调用,则$this
返回该方法所属的Object(该类)。
$this
如果上下文没有父对象,则可能是不确定的。
php.net上有一个很大的页面,讨论PHP面向对象的编程以及如何$this
根据上下文运行。
https://www.php.net/manual/zh/language.oop5.basic.php
我知道它的老问题,无论如何,另外一个关于$ 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
让我们看看如果我们不使用$ 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;
?>
这呼应“汤姆”
$this
在第二个构造函数中使用修复了它。
$name
是Tom,但在函数外部没有任何值,因为它的范围限于函数的范围。
当您创建一个类时,您将拥有(在许多情况下)实例变量和方法(又称函数)。$ 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
$ this是一个特殊变量,它指向同一对象,即。本身。
它实际上是引用当前类的实例
这是一个示例,可以清除上面的语句
<?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/>";
}
}
?>
这是冗长的详细说明。希望对初学者有所帮助。我将使其非常简单。
首先,让我们创建一个类
<?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
using的所有内容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