2010-12-21 108 views
8

您何时会在PHP中使用$this关键字?据我所知,$this是指在不知道对象名称的情况下创建的对象。

此外关键字$this只能在一个方法内使用?

举例说明,当您可以使用$this时,将会很棒。

+10

http://php.net/OOP - >基本知识。 – 2010-12-21 16:36:41

+3

特别是,请注意Example#2在这里:http://php.net/manual/en/language.oop5.basic.php – RabidFire 2010-12-21 16:38:59

+0

`$ this`不是PHP中的关键字(但是是一个*伪变量*),所以你的问题不能回答。 – hakre 2012-08-04 11:27:26

回答

6

一个类可能包含自己的常量,变量(称为“属性”)和函数(称为“方法”)。

<?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(); 
?> 

上例将输出:

  • $这被定义(A)
  • $这是不定义。
  • $ this is defined(B)
  • $ this is not defined。
1

它在面向对象的编程(OOP)中使用:

<?php 
class Example 
{ 
    public function foo() 
    { 
     //code 
    } 

    public function bar() 
    { 
     $this->foo(); 
    } 
} 

伪变量$这是可用的时 的方法是从 对象上下文中调用。 $这是调用对象(通常是该方法所属的对象 , ,但如果从辅助对象的 上下文中静态调用 方法,可能还有另一个对象)的引用 。

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(); 
    } 

} 
1

有一次,我知道我最终使用的this等值的其他语言是实现“良好”接口;否则返回void的每个类方法将返回this,这样可以方便地将方法调用链接在一起。

public function DoThis(){ 
    //Do stuff here... 
    return $this; 
} 
public function DoThat(){ 
    //do other stuff here... 
    return $this; 
} 

以上的可称为像这样:

myObject->DoThis()->DoThat(); 

这对于一些有用的东西。

0

不,我认为你的想法是错误的。当使用$this时,指的是同一类的对象。这样

认为我们有一个变量的值是$ var和THAT该对象的实例应设定为5

$这个 - > VAR = 5;

3

最常见的用例是在面向对象编程中,同时在类中定义或工作。例如:

class Horse { 
    var $running = false; 

    function run() { 
     $this->running = true; 
    } 
} 

正如你所看到的,run函数中,我们可以使用$this变量指马类,我们是“在”的实例。所以还有一点需要注意的是,如果你创建2个Horse类,那么每个类中的$this变量将引用该Horse类的特定实例,而不是两者。

1

用于当您想使用局部变量时。

您还可以从here了解更多关于它的信息。

function bark() { 
    print "{$this->Name} says Woof!\n"; 
} 
0

使用$这是引用属于当前对象

$这 - 方法或实例变量>名= $命名 或 $这 - > callSomeMethod()

那是否要使用当前对象的子类别中实现的变量或方法。

如果您想具体调用父类的实现,你会做这样的事情

父:: callSomeMethod()

1

$,这是用来对当前实例的引用一个东西。 所以你可以做这样的事情:

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(); 
1

当您创建的对象的新实例$此使用。

例如,想象一下:

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在班级里面。

-1
<?php 
    class identity { 
    public $name; 
    public $age; 
    public function display() { 
     return $this->name . 'is'. $this->age . 'years old'; 
    } 
    } 
?> 
相关问题