__toString() doit retourner une chaîne de valeur
Quelqu'un peut me dire ce que je fais de mal? C'est ma première fois à l'aide de __toString. Je reçois l'erreur suivante: Catchable fatal error: Method users_class::__toString() must return a string value
C'est mon appel à l'objet en utilisant Smarty:
{assign var='udatas' value="$userObj->fetchUser(array('id'=>$ststres[ststval].to_id))"}
C'est l'objet.
class users_class {
protected $users_class;
public function __toString() {
return $this->users_class;
}
public function fetchUser(array $conditions){
$db = Core::getInstance();
$sql = "SELECT * FROM ".USERS." WHERE ";
$i=0;
$params = array();
//$where = array();
foreach ($conditions as $column => $value) {
if (preg_match('/^[a-z-.-_]+$/', $column)) {
if($i!=0){
$sql .= " AND ";
}
$sql .= "$column = ?";
$params[] = $value;
$i++;
}
}
//$sql .= implode(' AND ', $where);
//$sql .= " order by title asc";
$res = $db->dbh->prepare($sql);
$res->execute(array_values($params));
return $res->fetch(PDO::FETCH_ASSOC);
}
}
Correctif pour
Cela signifie que, quelle que soit la valeur que vous avez définie pour la variable
Ce type de valeur doit être stockée dans
Pourquoi essayez-vous de mettre en œuvre
après l'incorporation de votre suggestion, il est résolu à l'erreur, mais la fonction ne retourne pas le résultat souhaité. Je pense qu'il vient de surpresses erreur.
protected $users_class = '';
ou return (string)$this->users_class;
Cela signifie que, quelle que soit la valeur que vous avez définie pour la variable
$users_class
n'est pas une chaîne.Ce type de valeur doit être stockée dans
users_class
?Pourquoi essayez-vous de mettre en œuvre
__toString()
pour commencer?après l'incorporation de votre suggestion, il est résolu à l'erreur, mais la fonction ne retourne pas le résultat souhaité. Je pense qu'il vient de surpresses erreur.
OriginalL'auteur Claude Grecea | 2012-12-17
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur
... must return a string value ...
signifie simplement la valeur de retour de __toString() doit être une valeur de type de données chaîne de caractères. Si $users_class dans votre exemple n'est pas destiné à être une valeur de chaîne, il y a conversion d'une chaîne de caractères avant de les retourner.Mais lors de la lecture de l'exemple ci-dessus, il me semble que la var $users_class peut tout simplement pas avoir été initialisé encore. Dans ce cas, changez la méthode __toString ():
Pour rendre le code ci-dessus fonctionne, vous aurez besoin de faire un changement dans le code smarty trop. Supprimez les guillemets autour de la valeur de la
value=
attribut.get_class($this)
dans le__toString()
méthode.cela ne fonctionne pas
Grecea exactement Ce qui ne fonctionne pas?
après la mise en œuvre de votre suggestion, la sortie est cela string(46) "->fetchUser(array('id'=>Array[ststval].to_id)) au lieu de la sortie souhaitée. Il semble que la seule chose qu'il a accompli a été la suppression de l'erreur. Avez-vous d'autres suggestions?
Vous devrez enlever les guillemets autour de l'smarty
value=
affectation :{assign var='udatas' value=$userObj->fetchUser(array('id'=>$ststres[ststval].to_id))}
OriginalL'auteur hek2mgl
Vous utilisez
$res->fetch(PDO::FETCH_ASSOC)
qui retournera un tableau quelconque.Vous accédez à des valeurs comme un objet standard.
Vous avez besoin de jeter à une classe, vous pouvez essayer en utilisant la
PDO::FETCH_CLASS
au lieu de laFETCH_ASSOC
.Il est difficile de dire avec le code que vous avez inclus.
$users_class
ne seront pas fixés parfetchUser()
après le changement de PDO::FETCH_CLASS, j'ai reçu l'erreur suivante
Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: No fetch class specified
Vous devez ajouter le nom de la classe users_class que la première colonne de votre SQL. Donc, ce serait SÉLECTIONNEZ "users_class',*. Vous pouvez également utiliser FETCH_OBJ mais qui retourne un StdClass et vous n'obtiendrez pas votre __toString fonction appelée
OriginalL'auteur Kevin Barnard
il suffit de remplacer avec:
return (string)$this->user_class;
OriginalL'auteur Pragnesh P