2011-01-07 6 views
1

Je ne sais pas pourquoi cela lance une erreur - en espérant que quelqu'un puisse voir le problème?La variable Unset provoque une erreur fatale?

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

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

classe client

// 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

Quelle est la classe 'Client'? – lonesomeday

+0

Que déclare 'unset()' déclaré? – Dan

+0

$ client = nouveau client ($ location, $ wsdl, $ nom d'utilisateur, $ mot de passe); – Dov

Répondre

6

La cause de votre problème est qu'il n'y a pas de méthode définie unset sur cette classe. Et vous ne pouvez pas en définir un non plus car unset est un reserved keyword. Vous ne pouvez pas définir une méthode avec elle comme son nom.

public function unset($foo) // Fatal Error 

public function _unset($foo) // Works fine 

Renommer la méthode à quelque chose d'autre, et changer l'appel ...

Edit: En regardant le code que vous venez d'éditer, vous devez changer le $client->unset('place')-$client->del('place'), puisque c'est le méthode dans la définition de classe ...

+0

@ircmaxell: Merci. Mise à jour de la question avec le code restant, j'espère que vous pouvez voir le problème que je me base sur cela. Si votre réponse reste, je suis heureux d'aller de l'avant et de faire le changement. – Dov

+0

Juste une mise en garde sur ce ** ircmaxell **; Si la logique est présente dans '__call()' pour un nom de méthode de 'if',' unset', etc., cela fonctionnera, permettant d'atteindre '$ obj-> unset ($ arg);' – Dan

+0

@Dov : Je viens d'éditer ma réponse pour votre édition ... – ircmaxell