7
votes

SplobjectStorage ne fonctionne pas avec une chaîne, que faire?

Quelqu'un a suggéré à E pour utiliser Splobitstorage pour garder une trace d'un ensemble de choses uniques. Génial, sauf que cela ne fonctionne pas avec des chaînes. Une erreur indique "SplObjectStorage :: Fixation () s'attend à ce que le paramètre 1 soit objet, chaîne donnée dans fback.php à la ligne 59"

Des idées?


0 commentaires

5 Réponses :


1
votes

envelopper la chaîne dans une STDCLASS?

$dummy_object = new stdClass();
$dummy_object->string = $whatever_string_needs_to_be_tracked;
$splobjectstorage->attach($dummy_object);


2 commentaires

Pouvez-vous fournir un exemple de code sur la manière de stocker un ensemble de chaînes uniques, puis de les utiliser sur eux? Pourquoi est-ce si difficile dans php ??


Ne pouviez-vous pas les stocker dans un tableau? On dirait que vous compliquez un peu beaucoup des choses;)



0
votes
foreach (StringStore::$strings as $string)
{
    // whatever
}

0 commentaires

9
votes

the SplObjectStorage code> est ce que son nom dit: une classe de stockage pour stocker des objets. Contrairement à certaines autres langages de programmation Strings Code> ne sont pas des objets dans PHP, ils sont, bien, cordes ;-). Il n'a donc aucun sens de stocker des chaînes dans un Splobitstorage code> - même si vous enveloppez vos chaînes dans un objet de classe stdclass code>.

Le meilleur moyen de stocker une collection de Strings uniques SI à utiliser des tableaux (en tant que hashables) avec la chaîne comme clé ainsi que la valeur (comme suggéré par Ian Selby ). P>

$ob1 = new stdClass();
$id1 = spl_object_hash($ob1);
$ob2 = new stdClass();
$id2 = spl_object_hash($ob2);
$objects = array(
    $id1 => $ob1,
    $id2 => $ob2
);


0 commentaires

5
votes

C'est un objet objet stockage. Une chaîne est un scalaire . Alors utilisez splstring .


0 commentaires

0
votes

ou peut-être simplement instancier votre chaîne comme objet avec __Tostring () - de cette façon, vous pouvez les avoir à la fois - objet et capacité à l'utiliser comme chaîne (Var_Dump, Echo) ..


0 commentaires