您何时会在PHP中使用$this
关键字?据我所知,$this
是指在不知道对象名称的情况下创建的对象。
此外关键字$this
只能在一个方法内使用?
举例说明,当您可以使用$this
时,将会很棒。
您何时会在PHP中使用$this
关键字?据我所知,$this
是指在不知道对象名称的情况下创建的对象。
此外关键字$this
只能在一个方法内使用?
举例说明,当您可以使用$this
时,将会很棒。
一个类可能包含自己的常量,变量(称为“属性”)和函数(称为“方法”)。
<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
的$的一些实例这个伪变量:
<?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();
?>
上例将输出:
它在面向对象的编程(OOP)中使用:
<?php
class Example
{
public function foo()
{
//code
}
public function bar()
{
$this->foo();
}
}
伪变量$这是可用的时 的方法是从 对象上下文中调用。 $这是调用对象(通常是该方法所属的对象 , ,但如果从辅助对象的 上下文中静态调用 方法,可能还有另一个对象)的引用 。
如果您在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();
}
}
有一次,我知道我最终使用的this
等值的其他语言是实现“良好”接口;否则返回void
的每个类方法将返回this
,这样可以方便地将方法调用链接在一起。
public function DoThis(){
//Do stuff here...
return $this;
}
public function DoThat(){
//do other stuff here...
return $this;
}
以上的可称为像这样:
myObject->DoThis()->DoThat();
这对于一些有用的东西。
不,我认为你的想法是错误的。当使用$this
时,指的是同一类的对象。这样
认为我们有一个变量的值是$ var和THAT该对象的实例应设定为5
$这个 - > VAR = 5;
最常见的用例是在面向对象编程中,同时在类中定义或工作。例如:
class Horse {
var $running = false;
function run() {
$this->running = true;
}
}
正如你所看到的,run
函数中,我们可以使用$this
变量指马类,我们是“在”的实例。所以还有一点需要注意的是,如果你创建2个Horse类,那么每个类中的$this
变量将引用该Horse类的特定实例,而不是两者。
使用$这是引用属于当前对象
$这 - 方法或实例变量>名= $命名 或 $这 - > callSomeMethod()
那是否要使用当前对象的子类别中实现的变量或方法。
如果您想具体调用父类的实现,你会做这样的事情
父:: callSomeMethod()
$,这是用来对当前实例的引用一个东西。 所以你可以做这样的事情:
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();
当您创建的对象的新实例$此使用。
例如,想象一下:
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,我必须创建类测试的新实例,就像这样:
$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"
事实上,$这是在类内部使用的,当instancied。它被认为是范围。
类里面你使用$此(访问* $ _你好*为例),但在类外,$此并不是指你的类中的元素(如* $ _你好*),它是$ obj确实。
现在,$ OBJ和之间的主要区别$此是因为$ OBJ访问您的类从外,一些限制情况:如果你定义的东西私人或保护在你的课,就像我的变量* $ _ *您好,$ OBJ不能访问它(它是私有的!),但$这个可以,becase的$此Le在班级里面。
<?php
class identity {
public $name;
public $age;
public function display() {
return $this->name . 'is'. $this->age . 'years old';
}
}
?>
http://php.net/OOP - >基本知识。 – 2010-12-21 16:36:41
特别是,请注意Example#2在这里:http://php.net/manual/en/language.oop5.basic.php – RabidFire 2010-12-21 16:38:59
`$ this`不是PHP中的关键字(但是是一个*伪变量*),所以你的问题不能回答。 – hakre 2012-08-04 11:27:26