2010-12-21 13 views
8

Wann würden Sie das Schlüsselwort $this in PHP verwenden? Von dem, was ich verstehe $this bezieht sich auf das Objekt erstellt, ohne den Namen der Objekte zu kennen.

Auch das Schlüsselwort $this kann nur innerhalb einer Methode verwendet werden?

Ein Beispiel wäre toll zu zeigen, wenn Sie $this verwenden können.

+10

http://php.net/OOP -> Die Grundlagen. –

+3

Beachten Sie insbesondere Beispiel # 2 hier: http://php.net/manual/en/language.oop5.basic.php – RabidFire

+0

'$ this' ist kein Schlüsselwort in PHP (aber eine * Pseudovariable *), damit deine Frage nicht beantwortet werden kann. – hakre

Antwort

6

Eine Klasse kann eigene Konstanten, Variablen ("Eigenschaften") und Funktionen ("Methoden") enthalten.

<?php 
class SimpleClass 
{ 
    // property declaration 
    public $var = 'a default value'; 

    // method declaration 
    public function displayVar() { 
     echo $this->var; 
    } 
} 
?> 

Einige Beispiele für die $ Diese pseudo-Variable:

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

Das obige Beispiel folgende Ausgabe:

  • $ Dieses definiert ist (A)
  • Diese $ ist nicht definiert.
  • $ das ist definiert (B)
  • $ dies ist nicht definiert.
1

Es ist in der objektorientierten Programmierung (OOP) verwendet:

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

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

Die Pseudo-Variable $ this verfügbar ist, wenn eine Methode aus einem Objektkontext aufgerufen wird. $ Dies ist ein Verweis auf das aufrufende Objekt (in der Regel das Objekt, zu dem die Methode gehört, aber möglicherweise ein anderes Objekt, wenn die -Methode statisch aus dem Kontext eines sekundären Objekts aufgerufen wird).

2

Sie würden $ nur verwenden, wenn Sie objektorientierte Programmierung in PHP durchführen. Bedeutung, wenn Sie Klassen erstellen. Hier ein Beispiel:

class Item { 
    protected $name, $price, $qty, $total; 

    public function __construct($iName, $iPrice, $iQty) { 
    $this->name = $iName; 
    $this->price = $iPrice; 
    $this->qty = $iQty; 
    $this->calculate(); 
    } 

} 
+0

Danke! Ich verstehe das, aber würden Sie jemals $ außerhalb einer Methode verwenden? – Imran

+0

Richtig, Sie würden nicht, weil dies nur in einer Klasse sinnvoll ist. Außerhalb davon würden Sie das Objekt verwenden, wie $ a = new Item(), Sie könnten $ a-> methodName() tun. –

1

Eine Zeit, die ich weiß, dass ich am Ende mit dem this äquivalent in anderen Sprachen sind ein ‚Fluent‘ Schnittstelle zu implementieren; Jede Klassenmethode, die andernfalls void zurückgeben würde, gibt this zurück, so dass Methodenaufrufe leicht miteinander verkettet werden können.

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

Die oben könnte wie so genannt werden:

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

die für einige Dinge nützlich sein kann.

+0

Sie meinen, dass es wie 'myObject-> DoThis() -> DoThat()' aufgerufen werden kann ;-)? – thedom

+0

@thedom - hehe ... sorry; Ich arbeite selten in PHP und mache fast nie OOP/PHP. Ich werde das beheben ... danke für das Heads-up über diesen albernen Fehler! :) –

+0

kein Problem ... Ich habe mich nur gewundert und war nicht mehr selbstbewusst wie es geht: P // EDIT ... $ myObject-> DoThis() -> DoThat() natürlich lol! – thedom

0

nein ich denke deine Idee ist falsch .. $this wird verwendet, wenn auf ein Objekt der gleichen Klasse verweist ..wie diese

denke wir haben ein var Variablenwert $ und in DIE Instanz dieses Objekt sollte

$ this-> var = 5 bis 5 eingestellt werden;

3

Der am häufigsten verwendete Anwendungsfall ist die objektorientierte Programmierung, wenn Sie innerhalb einer Klasse definieren oder arbeiten. Zum Beispiel:

class Horse { 
    var $running = false; 

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

Wie Sie sehen können, in der run Funktion, können wir die $this Variable verwenden, um die Instanz der Klasse Horse zu beziehen, die wir sind „in“. Die andere Sache, die Sie beachten sollten, ist, dass wenn Sie 2 Horse-Klassen erstellen, die Variable $this innerhalb jedes einzelnen auf diese spezifische Instanz der Horse-Klasse verweist, nicht auf beide.

1

Wird verwendet, wenn Sie mit lokalen Variablen arbeiten möchten.

Sie können auch mehr über es von here lesen.

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

Die Verwendung $ Dies ist auf das aktuelle Objekt

$ this-> name

= $ name oder this- $> callSomeMethod()

gehörenden Methoden oder Instanzvariablen zu verweisen, die wird die Variable oder die Methode verwenden, die im aktuellen Objekt implementiert ist oder nicht.

Wenn Sie möchten, speziell eine Implementierung der übergeordneten Klasse rufen Sie so etwas wie

parent :: callSomeMethod()

1

$ this verwendet wird, um einen Verweis auf die aktuelle Instanz tun würde ein Objekt. So können Sie tun Dinge wie:

class MyClass { 
    private $name; 

    public function setName($name) { 
     $this->name = $name; 
    } 

    //vs 
    public function setName($pName) { 
     $name = $pName; 
    } 
} 

Auch eine andere kühle Verwendung ist, dass man Ketten Methoden:

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

diese $ verwendet, wenn Sie eine neue Instanz eines Objekts erstellt haben.

Zum Beispiel vorstellen, dies:

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

Um getHello auf die Methode zuzugreifen, ich habe eine neue Instanz der Klasse-Test erstellen, wie folgt aus:

$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"  

In der Tat , $ Dies wird innerhalb der Klasse verwendet, wenn sie aktiviert wird. Es wird als Scope bezeichnet.

In Ihrer Klasse verwenden Sie diese $ (für den Zugriff auf * $ _ hallo * zum Beispiel), aber außerhalb der Klasse, diese $ NICHT auf die Elemente in Ihrer Klasse beziehen (wie * _ $ Hallo *), ist es $ obj das tut.

Nun, der Hauptunterschied zwischen $ obj und $ this seit obj Zugang $ ist Ihre Klasse von der außerhalb, passiert einige Einschränkungen: Wenn Sie etwas privaten oder geschützt in definieren Ihre Klasse, wie mein Variable * $ _ * Hallo, $ objkANN NICHT Zugriff es (es ist privat!), aber $ thiskann, becase $ this le Ave innerhalb der Klasse.

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