2010-04-13 3 views
0

J'ai rencontré un comportement PHP très étrange, je ne comprends pas pourquoi il se comporte comme ça. J'utilise la fonction imagesetbrush de cette façon:Comportement étrange de php sur une fonction gd

class foo 
{ 
    function setbrush($image) 
    { 
     //$this->_resource contains the main image resource 
     imagesetbrush($this->_resource, $image); 
    } 
} 
... 
$res=imagecreatefrompng("image.png"); 
$class->setbrush($res); 

de cette manière que cela fonctionne, mais si je change le code comme ceci:

class foo 
{ 
    function setbrush($image) 
    { 
     $res=imagecreatefrompng($image); 
     imagesetbrush($this->_resource, $res); 
    } 
} 
... 
$class->setbrush("image.png"); 

il ne fonctionne plus. Voyez-vous une erreur? Il ne me montre aucun message, il n'exécute tout simplement pas la fonction.

+0

Avez-vous des rapports d'erreur mis à E_ALL? –

Répondre

1

Se pourrait-il que la référence à la variable $ res disparaisse après l'appel de la fonction? Avez-vous essayé de le déclarer comme une variable de classe, tout comme la variable $ _resource?

+0

Cela fonctionne !!! Je ne sais pas pourquoi mais ça marche !!! Merci ... – mck89

+0

J'ai compris pourquoi il se comportait comme ça alors je l'écris. Imagesetbrush nécessite une référence à une image et dans un second temps, la référence n'est pas définie lorsque la fonction se termine, de sorte que PHP ne peut pas obtenir la ressource de pinceau. De la même manière, la référence est maintenue pour que ça marche. – mck89

0

Peut-être quelque part dans votre classe foo les changements de répertoire de travail, il ne trouve plus la image.png peut-être lors de l'ouverture //$this->_resource contains the main image resource