2010-05-02 4 views
4

Ok j'ai une chaîne ...chaîne PHP pour objet nom

$a_string = "Product"; 

et je veux utiliser cette chaîne dans un appel à un objet comme celui-ci:

$this->$a_string->some_function(); 

Comment diantre faire J'appelle dynamiquement cet objet?

(ne pense pas Im sur l'esprit php 5)

+0

avez-vous essayé ce code? .. de plus, ' echo phpversion(); 'vous montrera si vous êtes sur PHP 5. – salathe

+0

pourquoi ne pas utiliser call_user_func (ou call_user_func_array)? – zfm

Répondre

3

Donc, vous le code que vous souhaitez utiliser serait:

$a_string = "Product"; 
$this->$a_string->some_function(); 

Ce code implique un certain nombre de choses. Une classe appelée Product avec la méthode some_function(). $this a une signification spéciale, et est uniquement valide à l'intérieur une définition de classe. Donc, une autre classe aurait un membre de la classe Product. Donc, pour rendre votre code légal, voici le code.

class Product { 
    public function some_function() { 
     print "I just printed Product->some_function()!"; 
    } 
} 

class AnotherClass { 

    public $Product; 

    function __construct() { 
     $this->Product = new Product(); 
    } 

    public function callSomeCode() { 
     // Here's your code! 
     $a_string = "Product"; 
     $this->$a_string->some_function(); 
    } 
} 

Ensuite, vous pouvez l'appeler avec ceci:

$MyInstanceOfAnotherClass = new AnotherClass(); 
$MyInstanceOfAnotherClass->callSomeCode(); 
0

EDIT: Vous devez être en cours d'exécution afin de PHP5 faire une chainage des méthodes. Après cela, ce que vous avez est parfaitement légal.

+0

Mais ce n'est pas vrai.Ce que vous ne pouvez pas faire en PHP4 est de chaîner les appels de méthode comme ceci: '$ obj-> method1 (10) -> method2 (42);' (et les propriétés et les méthodes 'public/private/static') – ZJR

+0

pas besoin d'exécuter PHP 5.x pour faire une programmation orientée objet. Il existe également un modèle OO dans les anciennes versions. –

+0

Ok, mis à jour pour refléter cela. –

0

Dans le code que vous avez affiché, il semble que vous essayez d'appeler une fonction à partir d'une chaîne elle-même. Ma conjecture est que vous voulez appeler une fonction d'une classe avec le même nom que cette chaîne, dans ce cas "Produit".

C'est ce qui ressemblerait à ceci:

$this->Product->some_function(); 

Il vous semble peut-être au lieu de chercher quelque chose comme ceci:

$Product = new Product(); 
$Product->some_function(); 
0

Voyons voir si je suis bien vos intentions ...

$some_obj=$this->$a_string; 
$some_obj->some_function(); 
0

Donc, vous avez un objet, et l'un de ses propriétés (appelé « Produit ») est un autre objet qui a une méthode appelée une_fonction().

Cela fonctionne pour moi (en PHP5.3):

<?PHP 


class Foo { 
    var $bar; 
} 

class Bar { 
     function some_func(){ 
      echo "hello!\n"; 
     } 
} 

$f = new Foo(); 
$f->bar = new Bar(); 

$str = 'bar'; 

$f->$str->some_func(); //echos "hello!" 

Je n'ai pas PHP4 autour, mais si ça ne marche pas là, vous pourriez avoir besoin d'utiliser call_user_func() (ou call_user_func_array() si vous avez besoin de passer des arguments à une_fonction()

1

me semble avoir lu cette question différemment de tout le monde qui a répondu, mais essayez-vous d'utiliser variable variables?