2009-09-16 10 views
0

J'essaie de m'instruire php ... alors s'il vous plaît soyez gentil et supporter avec moi.php Object to String

Je suis en train de suivre this tutorial sur la façon de mettre en cache des fichiers ... la page que je veux mettre en cache est HTML uniquement, j'ai donc modifié le php pour traiter uniquement les données. Je sais que la partie de cache fonctionne, c'est quand j'essaie de modifier les résultats que j'obtiens une erreur fatale "Catchable: l'objet de la classe Caching n'a pas pu être converti en chaîne" dans la ligne str_replace ci-dessous.

J'ai essayé d'utiliser le __toString method here, et j'ai essayé d'utiliser serialize. Y a-t-il quelque chose qui me manque?

Edit: Oh et j'ai même essayé casting operators.

$caching = new Caching("my.htm", "http://www.page-I-want.com/"); 
$info = new TestClass($caching); 
$info = str_replace("<img src='/images/up.jpg'>","<div class='up'></div>", $info); 

Mon var_dump ($ cache); est la suivante:

object(Caching)#1 (2) { ["filePath"]=> string(9) "cache.htm" ["apiURI"]=> string(27) "http://www.page-I-want.com/" } 

Ok, je vois maintenant que le problème est avec le caching.php ne pas retourner la valeur à la chaîne de mise en cache de $. Quelqu'un peut-il vérifier le lien ci-dessous et m'aider à comprendre pourquoi cela ne fonctionne pas? Merci!

Je viens de poster mon fichier caching.php entier here.

+0

Etes-vous en train de remplacer les images alors que l'objet est sérialisé, puis de le désérialiser? – null

+0

Vous avez donc implémenté la méthode __toString dans votre classe Caching? À quoi cela ressemble-t-il? (Inutile lorsque vous appelez sérialiser en premier, mais vous feriez mieux de ne pas modifier le contenu d'un objet sérialisé) – Joost

+0

Vous aider serait plus facile si vous pouviez ajouter ce que var_dump ($ cache); impressions. – Raynet

Répondre

1

Le code sur le site que vous liez fonctionne en téléchargeant la page de l'URL que vous donnez et en l'analysant pour les artistes, puis enregistrez-les dans le fichier cache. L'objet cache ne contient que deux variables; filePath et apiURI. Si vous souhaitez modifier la façon dont la page est analysée et convertie dans le fichier XML mis en cache, vous devez modifier la fonction stripAndSaveFile.

Voici un exemple de la façon de modifier le Caching.php pour faire ce que vous vouliez:

function stripAndSaveFile($html) { 
     //mange the html code in any way you want 
     $modified_html = str_replace("<img src='/images/up.jpg'>","<div class='up'></div>", $html); 
     //save the xml in the cache 
     file_put_contents($this->filePath, $modified_html); 
    }   

Edit:

Une autre option est d'étendre la classe Caching, dans votre code PHP en utilisant la classe que vous pourriez faire:

class SpecialCaching extends Caching { 
     var $html = ""; 
     function stripAndSaveFile($html) { 
       //mange the html code in any way you want 
       $this->html = $html; 
     } 
    } 

    $caching = new SpecialCaching("my.htm", "http://www.page-I-want.com/"); 
    $info = $caching->html; 
    $info = str_replace("<img src='/images/up.jpg'>","<div class='up'></div>", $info); 
+0

J'ai renommé la fonction stripAndSaveFile, et je ne voulais pas modifier les données dans le fichier caching.php parce que je vais l'utiliser pour d'autres fichiers et remplacer des objets différents - j'ai ajouté la fonction au premier poste. – Mottie

+0

J'ai abandonné et remplacé la chaîne à l'intérieur du Caching.fichier php et ça marche maintenant ... merci pour votre aide! – Mottie