2010-12-15 13 views
7
'<a rel="nofollow" href="$1" class="bbc_link new_win" target="_blank">' 

Je voudrais utiliser la fonction urlencode():Comment utiliser une fonction dans une chaîne?

'<a rel="nofollow" href="urlencode($1)" class="bbc_link new_win" target="_blank">' 

... mais je ne peux pas utiliser ceci:

'<a rel="nofollow" href="'.urlencode($1).'" class="bbc_link new_win" target="_blank">' 

... parce que $1 n'est pas une variable dans la chaîne ; c'est plutôt une méta-variable dans un forum gratuit et simple.

il envoyer http://www.test.com/out.php?out=http://www.example.com

Répondre

2

Vous ne pouvez pas le faire. Vous devez encoder la valeur où elle est générée ou où elle est remplacée dans cette chaîne, pas dans ce modèle où vous n'avez pas accès.

2

Je viens de passer en revue le string parsing section of the PHP manual et il ne semble pas y avoir un moyen d'appeler une fonction à l'intérieur d'une chaîne entre guillemets (à l'exception de l'attribution dynamique d'un nom de variable). Pardon.

0

Vous devez étendre le fonctionnement de votre moteur de création de modèles pour le prendre en charge. Il n'y a aucun moyen de faire en sorte que PHP le fasse pour vous.

3

Il existe un moyen de le faire, mais suivez mes conseils et ne l'utilisez pas. vous ne devriez pas utiliser les appels de fonction dans les chaînes. Cependant, je vais poster un exemple juste pour montrer ce que PHP est capable de faire.

MAIS CECI EST UN ÉCHANTILLON EXTRÊME DE MAUVAISE PROGRAMMATION !!!!

<?php 
class FunctionAgent{ 
    public function __call($name,$args){ 
     switch (count($args)){ 
      case 0: 
       return $name(); 
       break; 
      case 1: 
       return $name($args[0]); 
       break; 
      case 2: 
       return $name($args[0],$args[1]); 
       break; 
      case 3: 
       return $name($args[0],$args[1],$args[2]); 
       break; 
      case 4: 
       return $name($args[0],$args[1],$args[2],$args[3]); 
       break; 
      case 5: 
       return $name($args[0],$args[1],$args[2],$args[3],$args[4]); 
       break; 
     } 
    } 
} 

$_ = new FunctionAgent(); 
echo "the current date is {$_->date("y-m-d")}"; 

?> 
+0

Votre avertissement fait écho à mon intuition. Mais le seul problème avec ce que je peux réellement expliquer est que c'est une convention peu familière. Les classes/objets sont en effet [mauvaise pratique] (http://en.wikipedia.org/wiki/Poltergeist_ (computer_science)) - _dans un contexte de POO_. Si 'FunctionAgent' facilite la vie d'un développeur (et que chaque milliseconde de temps d'exécution du script n'est pas un problème), pourquoi ne pas l'utiliser? –

+1

@smhmic Ma règle d'or est: s'en tenir à ce que les gens attendent ou documenter verbalement. Il est très intéressant de voir à quel point vous freinez les «règles» si vous devez écrire une explication détaillée de ce que vous faites, pourquoi vous le faites et quelles approches «plus propres» vous avez considérées et rejetées. Mais en regardant ce code de 3 ans, je me rends compte que je devrais utiliser 'call_user_func' –

6

que diriez-vous de ce bidouille fou?

<? 
$_ = 'urlencode'; 
echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">"; 
3

Découvrez cette astuce:

function foo() { return "title"; } 

$func = function($param) { return $param; }; 

$link = 'http://www.test.com/out.php?out=http://www.example.com'; 
echo "<a rel=\"nofollow\" href=\"{$func(urlencode($link))}\" class=\"bbc_link new_win\" target=\"_blank\">{$func(foo())}</a>"; 

$func() sera appelée en fonction, et sera évaluée l'expression dans les parenthèses comme tout autre code PHP.

hack is found here

Questions connexes