我一直在PHP中看到变量$this
,我不知道它用于什么。我从来没有亲自使用它,搜索引擎忽略了$
,我最终搜索了“this”这个词。
有人可以告诉我变量$这在PHP中是如何工作的吗?
答案 0 :(得分:114)
它是对当前对象的引用,它最常用于面向对象的代码中。
示例:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
这将'Jack'字符串存储为创建对象的属性。
答案 1 :(得分:32)
了解php中$this
变量的最佳方法是询问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
答案 2 :(得分:14)
我知道它的旧问题,无论如何另一个关于 $ 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
答案 3 :(得分:8)
这是从内部引用类的实例的方法,与许多其他面向对象的语言相同。
来自PHP docs:
伪变量$ this可用 从一个方法中调用一个方法时 对象上下文。 $这是一个参考 到调用对象(通常是 该方法所属的对象, 但可能是另一个对象,如果是 方法从静态调用 次要对象的上下文。)
答案 4 :(得分:6)
让我们看看如果我们不使用$ 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;
?>
这回应了汤姆&#39;
答案 5 :(得分:3)
当你创建一个类时,你有(在很多情况下)实例变量和方法(也就是函数)。 $ 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
答案 6 :(得分:3)
$this
是a reference to the calling object(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)。
答案 7 :(得分:3)
这是详尽的详细解释。希望对初学者有所帮助。我将使其变得非常简单。
首先,让我们创建一个类
<?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
答案 8 :(得分:2)
$这是一个特殊变量,它指的是同一个对象,即。本身。
它实际上是指当前类的实例
这是一个清除上述陈述的例子
System.out.println("Los platos para el dia de hoy son:");
java.util.Arrays.asList(menu).forEach(System.out::println);
答案 9 :(得分:0)
它指的是当前类的实例,如 meder 所述。
请参阅PHP Docs。这是在第一个例子中解释的。
答案 10 :(得分:0)
通常,此关键字在类内部使用,通常与成员函数一起用于访问当前对象的类的非静态成员(变量或函数)。
让我们举一个例子来了解$ this的用法。
<?php
class Hero {
// first name of hero
private $name;
// public function to set value for name (setter method)
public function setName($name) {
$this->name = $name;
}
// public function to get value of name (getter method)
public function getName() {
return $this->name;
}
}
// creating class object
$stark = new Hero();
// calling the public function to set fname
$stark->setName("IRON MAN");
// getting the value of the name variable
echo "I Am " . $stark->getName();
?>
输出: 我是钢铁侠
注意: 静态变量充当全局变量,并在该类的所有对象之间共享。非静态变量特定于创建它们的实例对象。