IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Utilisation d'une méthode dans une variable


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut [POO] Utilisation d'une méthode dans une variable
    Bonjour,

    J'ai une méthode définie dans une variable et je n'arrive pas à l'utiliser.

    Partie utile du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	private $imageCreateFunc;
     
    	private function setFunctions()
    	{
    		switch ($this->mime) {
    				case 'image/jpeg':
    						$imageCreateFunc	= 'imagecreatefromjpeg';
    						break;
     
    				case 'image/png':
    						$imageCreateFunc	= 'imagecreatefrompng';
    						break;
     
    				case 'image/gif':
    						$imageCreateFunc	= 'imagecreatefromgif';
    						break;
     
    				default: 
    						throw new Exception('Unknown image type');
    		}
    		$this->imageCreateFunc	= $imageCreateFunc;
    	}
     
    	public function save(){
    		// ... du code ...
    		$image	= $this->imageCreateFunc($this->targetPath);
    		// ... du code ...
    	}
    La ligne 26 provoque une erreur:
    Call to undefined method ImageResize\ImageResize::imageCreateFunc()
    J'ai essayé de remplacer la ligne 21 par celle-ci $this->imageCreateFunc = '\\'.$imageCreateFunc; mais j'ai toujours la même erreur.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->{$this->imageCreateFunc}($this->targetPath);

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut
    Bonjour,
    Non, ça ne marche pas. Il ne s'agit pas d'une méthode de la classe mais d'une fonction de l'espace général.
    Que j'écrive $image = $this->imageCreateFunc($this->targetPath); ou $image = $this->{$this->imageCreateFunc}($this->targetPath);, j'ai toujours la même erreur:
    Call to undefined method ImageResize\ImageResize::\imagecreatefrompng()
    Si j'écris: $image = {$this->imageCreateFunc}($this->targetPath); avec des accolades, j'ai une erreur de syntaxe.
    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$imageCreateFunc = $this->imageCreateFunc;
    		$image	= $imageCreateFunc($this->targetPath);
    J'ai d'autres erreurs que je dois encore résoudre.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    Il ne s'agit pas d'une méthode de la classe mais d'une fonction de l'espace général.
    Dans ce cas 2 possibilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
     
    function f1()
    {
        echo "Je suis dans f1()\r\n";
    }
     
    class Foo
    {
        public $f = 'f1';
     
        public function __construct()
        {
            // Méthode 1
            $f = $this->f;
            $f();
     
            // Méthode 2
            call_user_func($this->f);
        }
    }
     
    new Foo();
    Si ça bloque toujours donne l'erreur obtenue et un extrait de code fonctionnel.

Discussions similaires

  1. [VB.NET] Utilisation d'une variable dans une autre form (!)
    Par neuropathie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2005, 13h09
  2. [vb.net] utilisation d'une variable dans le code
    Par arnolem dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/09/2005, 19h22
  3. Réponses: 9
    Dernier message: 05/07/2005, 08h37
  4. Utilisation d'une Variable(Vb) dans d'autre language
    Par cach dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/02/2005, 12h00
  5. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo