2012-04-04 9 views
2

Haben eine Klasse, die ich verwende, überschreibe ich Variablen in der Klasse, um sie zu den Werten, die ich brauche ändern, aber ich auch nicht sicher, ob oder wie zu handhaben Problem. Ich muss einen Schlüssel hinzufügen, der für jede dieser URLs generiert wird, bevor die Klasse sie aufruft. Ich kann die Klassendatei selbst nicht ändern.Wie verwende ich eine Variable innerhalb einer erweiterten Klasse öffentlichen Variablen

use Theme/Ride 

class ETicket extends Ride { 

    public $key='US20120303'; // Not in original class 
    public $accessURL1 = 'http://domain.com/keycheck.php?key='.$key; 
    public $accessURL2 = 'http://domain.com/keycheck.php?key='.$key; 

} 

Ich verstehe, dass Sie eine Variable in der Einstellung der öffentlichen Klassenvariablen nicht verwenden können. Ich bin mir nicht sicher, wie ich so etwas im richtigen Format machen könnte.

Meine OOP Fähigkeiten sind schwach. Ich gebe es zu. Also, wenn jemand einen Vorschlag hat, wo ich darüber nachlesen und einen Hinweis bekommen könnte, würde es auch geschätzt werden. Ich schätze, ich brauche OOP für Dummies. =/

---- --- UPDATE

Die anfängliche FAHRT Klasse 2 URLs gesetzt.

public $accessURL1 = "http://domain.com/index.php"; 
public $accessURL2 = "http://domain.com/index2.php"; 

Ich sollte sie überschreiben, damit die RIDE-Klasse meine neuen Domänen verwenden wird.

Ich kann die folgende hinzufügen und es funktioniert ...

class ETicket extends RIDE { 
    public $accessURL1 = 'http://mydomain.com/myindex.php'; 
    public $accessURL2 = 'http://mydomain.com/myindex2.php'; 
} 

Allerdings möchte ich auch von anderswo eine Variable übergeben ($ key) als Parameter an die URL, wenn ich sie so außer Kraft setzen, wenn ich Rufen Sie RIDE auf, es hat eine URL mit dem Wert von KEY am Ende. (? Key = keyvalue)

Antwort

1

Ihre Nähe, wenn Sie nicht wollen, zu ermöglichen, Code Aufruf der $ Schlüssel zu ändern, können Sie so etwas wie tun:

class ETicket extends Ride { 

    public function getKey() 
    { 
     return 'US20120303'; 
    }  

    public function generateUrl() 
    { 
     return 'http://domain.com/keycheck.php?key=' . $this->getKey(); 
    } 
} 

// Calling code example 
$eTicket= new ETicket(); 

// $key is a member of ETicket class, so just call on generateUrl which will 
// build and return the url 
var_dump($eTicket->generateUrl()); 

können Sie auch Code erlauben Aufruf die sich ändern Schlüssel, wenn nötig, durch eine öffentliche Setter/Getter hinzu:

class ETicket extends Ride { 

    protected $key; 

    public function setKey($key) 
    { 
     $this->key = $key; 
    } 

    public function getKey() 
    { 
     return $this->key; 
    } 

    public function generateUrl() 
    { 
     return 'http://domain.com/keycheck.php?key=' . $this->getKey(); 
    } 
} 

// Calling code example 
$eTicket= new ETicket(); 

$eTicket->setKey('US20120303'); 
var_dump($eTicket->generateUrl()); 

- UPDATE -

Es gibt ein paar Optionen, können Sie entweder appe nd der Schlüssel zu Ihrer URL als Teil des anrufenden Code wie folgt:

$eTicket= new ETicket(); 

$url = $ride->accessURL1 . '?key=US20120303'; 

Oder verwenden Sie eine Methode (leicht verändert Schlüssel direkt zu akzeptieren), wie ich vorhin beschrieben:

class ETicket extends Ride 
{ 
    public function generateUrl($key) 
    { 
     return $this->accessURL1 . '?key=' . $key; 
    } 
} 

$eTicket= new ETicket(); 

$url = $eTicket->generateUrl('US20120303'); 

Ich denke, Der Punkt ist, Sie können nicht tun, was Sie ursprünglich gefragt, ohne eine Variable mit einer Membervariablen Initialisierung zu verketten ist.

+0

Hallo, hat diese Antwort überhaupt geholfen? –

+0

Entschuldigung für die Verzögerung in einer Antwort. Ich bekomme, was Sie tun, aber nicht sicher, wie Sie es in der Umgebung implementieren, die ich verwende. Ich vermute, dass es meine Beschreibung des Problems ist, die ich zu haben scheint. Ich werde versuchen, die erste Frage zu erweitern. –