2011-01-07 8 views
1

Ich habe keine Ahnung, warum dies einen Fehler verursacht - in der Hoffnung, dass jemand das Problem sehen kann?Ungesetzte Variable verursacht schwerwiegenden Fehler?

$client->set('place', 'home'); 
$client->placeInfo(); 
$client->screen($client->response()); 
$client->unset('place'); 

Fatal error: Call to undefined method Client::unset()...

Client-Klasse

// stores the client data 
private $data = array(); 
// stores the result of the last method 
private $response = NULL; 

/** 
* Sets data into the client data array. This will be later referenced by 
* other methods in this object to extract data required. 
* 
* @param str $key - The data parameter 
* @param str $value - The data value 
* @return $this - The current (self) object 
*/ 
public function set($key, $value) { 
$this->data[$key] = $value; 
return $this; 
} 

/** 
* dels data in the client data array. 
* 
* @param str $key - The data parameter 
* @return $this - The current (self) object 
*/ 
public function del($key) { 
unset($this->data[$key]); 
return $this; 
} 

/** 
* Gets data from the client data array. 
* 
* @param str $key - The data parameter 
* @return str $value - The data value 
*/ 
private function get($key) { 
return $this->data[$key]; 
} 

/** 
* Returns the result/server response from the last method 
* 
* @return $this->response 
*/ 
public function response() { 
return $this->response; 
} 


public function placeInfo() { 
$this->response = $this->srv()->placeInfo(array('place' => $this->get('place'))); 
return $this; 
} 
+0

Was ist die Klasse 'Client'? – lonesomeday

+0

Was wird 'unset()' deklariert? – Dan

+0

$ client = neuer Client ($ location, $ wsdl, $ username, $ password); – Dov

Antwort

6

Die Ursache des Problems ist, dass es keine Methode unset für diese Klasse definiert ist. Und Sie können auch keinen definieren, weil unset ein reserved keyword ist. Sie können keine Methode damit als Name definieren.

public function unset($foo) // Fatal Error 

public function _unset($foo) // Works fine 

Benennen Sie die Methode, um etwas anderes, und das Gespräch ändern ...

Edit: Mit Blick auf den Code, den Sie gerade bearbeitet in, müssen Sie die $client->unset('place')-$client->del('place') ändern, denn das ist das ist Methode in der Klassendefinition ...

+0

@ircmaxell: Danke. Aktualisierte Frage mit verbleibendem Code, hoffentlich können Sie das Problem sehen, das ich darauf basiert habe. Wenn Ihre Antwort bleibt, bin ich glücklich, die Änderung vorzunehmen. – Dov

+0

Nur ein Vorbehalt auf dem ** ircmaxell **; Wenn Logik in '__call()' für einen Methodennamen wie 'if', 'unset' usw. vorhanden ist, wird es funktionieren, was es möglich macht, $ obj-> unset ($ arg); ' – Dan

+0

@Dov zu erreichen : Ich habe gerade meine Antwort für Ihre Bearbeitung bearbeitet ... – ircmaxell

Verwandte Themen