2017-12-15 4 views
-7

Ich möchte die Klasse erstellen, die mein Protokoll verwalten sollte. Ich fange an, diese Klasse zu schreiben. Und ich weiß nicht wann ich $ dies und wann einfache Variable verwenden soll. Hier ist der Code.

<?php 
    class Log{ 
     private $name = "record.log"; 

     public function create($this->name){ 
      $handle = fopen($this->name, "a+"); 
      fclose($handle); 
     } 
    } 

Oder sollte ich nur $name statt $this->name?

+3

http://php.net/manual/en/language.oop5.basic.php –

+2

Das ist keine Klasse –

+0

$ name wird im Rahmen der Funktion nach der Variable suchen. Wenn Sie die außerhalb einer Funktion in einer Klasse definierte Variable verwenden möchten, müssen Sie mit $ this-> name darauf zugreifen. –

Antwort

1

In OOP:
$this->name ist Eigenschaft des Objekts, die durch die Klasse definiert ist und zugänglich ist global innerhalb des Objekts.
$name ist variabel innerhalb der Klassenmethode verwendet und ist zugänglich nur lokal innerhalb der Objektmethode (eine Funktion)

Ganz kurz:

class myClass{ 

    private $name = "record.log"; 

    function myMethod(){ 
     $name = 'this exists only in the method myMethod()'; 
     $this->name; // this contains the 'record.log' string 
    } 

} 

Von außerhalb der Klasse, die Sie nicht die Variable $name innerhalb eines definierten Zugriff Objekt.

Sie können nur die Eigenschaft $ name in der Klasse definiert zugreifen, sondern von außerhalb des Objekts, das Sie es mit dem Objektnamen nennen muss:

$obj = new myClass(); 
$log_file = $obj->name; // this would contain the string 'record.log' 

auch immer Sie die Objekteigenschaft als privat definiert so den direkten Zugriff wird von außerhalb des Objekts eingeschränkt. Um darauf zugreifen zu können, müssen Sie Getter/Setter eine Methode definieren, die das Lesen/Schreiben in private Eigenschaften übernimmt.

// add to the class methods 
public function getName(){ 
    return $this->name; 
} 

public function setName($value){ 
    // do some validation of the value first 
    //... 
    // then assign the value 
    $this->name = $value; 
} 

So, jetzt können Sie die Objekt-Eigenschaft $ name von außerhalb Zugriff des Objekts Anweisungen mit:

echo $obj->getName(); // prints record.log 
$obj->setName('new.log'); 
echo $obj->getName(); // prints new.log 
+0

hast du eigentlich alles aus geschrieben oder das von irgendwoher genommen? –

+0

Ich schreibe gerade eine Stimmung;) – ino

+0

hehe, ok cool. Nun, lass uns hoffen, dass das OP daraus lernen wird :) –

Verwandte Themen