2010-11-03 9 views
0

Je suis en train de jouer avec l'accrochage dans les fonctions, le crochet appellera la méthode d'un autre objet, quelle est la meilleure façon de changer la valeur $ price dans la fonction parente avant qu'elle ne soit revenu?PHP meilleure méthode pour affecter les variables dans une fonction

function _product_price ($price,$taxable = true) 
{ 
    $shop->_hook('PRODUCT_PRICE_BEFORE'); 
    $price = 100.00; 
    $shop->_hook('PRODUCT_PRICE_AFTER'); 
    return number_format($price,2); 
} 

Merci les gars, serait-ce une solution appropriée?

function _product_price ($price,$taxable = true) 
{ 
    global $shop; 
    $shop->_hook('PRODUCT_PRICE_BEFORE'); 
    $price = 100.00; 
    $shop->passedArgs['price'] = $price; 
    $shop->_hook('PRODUCT_PRICE_AFTER'); 
    return number_format($shop->passedArgs['price'],2); 
} 
function _hook() 
{ 
    global $shop; 
    $shop->passedArgs['price'] = 23.00; 
    return; 
} 
+0

Je devrais mentionner que je peux choisir de retourner plus d'une valeur ou pas du tout. Sans passer par un tableau de valeurs renvoyées $ price = $ shop -> _ hook ('PRODUCT_PRICE_AFTER'); ne serait pas très utile. – woodscreative

Répondre

1

Je passe les variables au point soit :

  • comme un tableau de références, (array('price' => &$price); apporterait une modification à la variable $var['price'] dans une fonction plus tard/plus de refléter dans le 'in-scope' $price.
  • Définissez les variables sur le point en tant que propriété d'objet et transmettez simplement l'objet observable actuel en tant que paramètre.
+0

L'édition ci-dessus conviendrait-elle? – woodscreative

+0

Cela peut fonctionner, mais je l'appellerais difficilement. '' passedArgs' ne devrait pas être nécessaire dans tout système de hook/observateur décent, dans environ 99% des cas ils devraient être des propriétés 'naturelles' des objets. L'introduction de globals semble un peu décalée, généralement un objet observateur est ajouté en tant que propriété à un sujet/observable. – Wrikken

+0

J'ai vu la lumière! Vous avez raison, je ne travaille qu'avec un objet produit à la fois, donc j'ai juste modifié l'objet directement dans le crochet. Ensuite, je n'ai pas besoin de retourner quoi que ce soit. \t 'fonction _produit_prix ($ prix, $ taxable = true) \t { \t global $ boutique; \t $ shop -> _ hook ('PRODUCT_PRICE_BEFORE'); \t // Prix par défaut \t $ shop-> product-> price = 100.00; \t $ shop -> _ hook ('PRODUCT_PRICE_AFTER'); \t} \t fonction _hook() { \t \t magasin global $; \t $ shop-> produit-> prix = 23.00; \t} ' – woodscreative

Questions connexes