您何时会在PHP中使用$this
关键字?据我所知$this
指的是在不知道对象名称的情况下创建的对象。
关键字$this
也只能在方法中使用吗?
如果您可以使用$this
,那么展示一个很好的例子。
答案 0 :(得分:6)
类可以包含自己的常量,变量(称为“属性”)和函数(称为“方法”)。
<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
$ this伪变量的一些例子:
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
}
}
$a = new A();
$a->foo();
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
$b = new B();
$b->bar();
// Note: the next line will issue a warning if E_STRICT is enabled.
B::bar();
?>
以上示例将输出:
答案 1 :(得分:3)
最常见的用例是在面向对象编程中,在类中定义或工作。例如:
class Horse {
var $running = false;
function run() {
$this->running = true;
}
}
正如您所看到的,在run
函数中,我们可以使用$this
变量来引用我们所在的Horse类的实例。所以要记住的另一件事是,如果你创建2个Horse类,每个类中的$this
变量将引用Horse类的特定实例,而不是它们两者。
答案 2 :(得分:2)
如果您在PHP中进行面向对象编程,则只能使用$ this。这意味着如果您正在创建类。这是一个例子:
class Item {
protected $name, $price, $qty, $total;
public function __construct($iName, $iPrice, $iQty) {
$this->name = $iName;
$this->price = $iPrice;
$this->qty = $iQty;
$this->calculate();
}
}
答案 3 :(得分:2)
$ this用于引用对象的当前实例。 所以你可以做以下事情:
class MyClass {
private $name;
public function setName($name) {
$this->name = $name;
}
//vs
public function setName($pName) {
$name = $pName;
}
}
另一个很酷的用途是你可以链接方法:
class MyClass2 {
private $firstName;
private $lastName;
public function setFirstName($name) {
$this->firstName = $name;
return $this;
}
public function setLastName($name) {
$this->lastName = $name;
return $this;
}
public function sayHello() {
print "Hello {$this->firstName} {$this->lastName}";
}
}
//And now you can do:
$newInstance = new MyClass2;
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello();
答案 4 :(得分:1)
它用于面向对象编程(OOP):
<?php
class Example
{
public function foo()
{
//code
}
public function bar()
{
$this->foo();
}
}
伪变量$ this可用 从一个方法中调用一个方法时 对象上下文。 $这是一个参考 到调用对象(通常是 该方法所属的对象, 但可能是另一个对象,如果是 方法从静态调用 次要对象的上下文。)
答案 5 :(得分:1)
有一次我知道我最终在其他语言中使用this
等价物来实现'Fluent'界面;否则返回void
的每个类方法都会返回this
,因此方法调用可以很容易地链接在一起。
public function DoThis(){
//Do stuff here...
return $this;
}
public function DoThat(){
//do other stuff here...
return $this;
}
以上可以这样称呼:
myObject->DoThis()->DoThat();
这对某些事情有用。
答案 6 :(得分:1)
答案 7 :(得分:1)
$ this 。
例如,想象一下:
class Test {
private $_hello = "hello";
public function getHello () {
echo $this->_hello; // note that I removed the $ from _hello !
}
public function setHello ($hello) {
$this->_hello = $hello;
}
}
为了访问方法getHello,我必须创建一个类Test的新实例,如下所示:
$obj = new Test ();
// Then, I can access to the getHello method :
echo $obj->getHello ();
// will output "hello"
$obj->setHello("lala");
echo $obj->getHello ();
// will output "lala"
实际上,$ this在课堂内使用,当实例化时。它被称为范围。
在课堂上你使用 $ this (例如访问* $ _ hello *)但是在课堂之外, $ this 不会引用课堂内的元素(比如* $ _ hello *),它是 $ obj 。
现在, $ obj 和 $ this 之间的主要区别是, $ obj 从外部访问 strong>,会发生一些限制:如果您在类中定义私有或受保护,例如我的变量* $ _ hello *, $ obj < strong> CAN NOT 访问它(它是私有的!)但是 $ this 可以,因为$这留在了课堂内。
答案 8 :(得分:0)
不,我认为你的想法是错误的。当引用同一个类的对象时使用$this
..像这样
我们认为我们有一个变量值$ var,而那个该对象的实例应该设置为5
$这 - &GT; VAR = 5;
答案 9 :(得分:0)
使用$ this来引用属于当前对象的方法或实例变量
$ this-&gt; name = $ name 要么 $这 - &GT; callSomeMethod()
将使用当前对象子类中实现的变量或方法。
如果您想专门调用父类的实现,您可以执行类似
的操作父:: callSomeMethod()
答案 10 :(得分:0)
每当您要使用函数外部但在同一类内部的变量时,请使用$ this。这是一个核心的php概念。
答案 11 :(得分:-1)
setter