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

Chciałbym użyć urlencode() funkcję:Jak korzystać z funkcji wewnątrz łańcucha?

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

... ale nie mogę użyć tego:

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

... bo $1 nie jest zmienna w ciągu ; zamiast tego jest meta-zmienną na prostym bezpłatnym forum.

wysłać http://www.test.com/out.php?out=http://www.example.com

Odpowiedz

2

Nie można tego zrobić. Musisz zakodować wartość, w której została wygenerowana lub gdzie została zastąpiona w tym ciągu, a nie w tym szablonie, w którym nie masz do niego dostępu.

0

Musisz rozszerzyć działanie mechanizmu szablonowego, aby to wspierać. Nie ma sposobu, aby PHP zrobił to za Ciebie.

3

Istnieje sposób, aby to zrobić, ale skorzystaj z mojej rady i nie używaj jej. nie powinieneś używać wywołań funkcji wewnątrz łańcuchów. Zamieszczam jednak przykład tylko po to, aby pokazać, do czego PHP jest zdolny.

ALE TO JEST EKSTREMALNA PRÓBKA ZŁEGO PROGRAMOWANIA !!!!

<?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

Twoje ostrzeżenie odbija się echem w mojej intuicji. Ale jedynym problemem, który mogę wyjaśnić, jest to, że jest to nieznana konwencja. Klasy/przedmioty są rzeczywiście [złe praktyki] (http://en.wikipedia.org/wiki/Poltergeist_ (computer_science)) - _w kontekście OOP_. Jeśli 'FunctionAgent' ułatwia życie deweloperów (a każda milisekunda czasu wykonywania skryptu nie jest problemem), dlaczego nie używać? –

+1

@smhmic Moja złota zasada brzmi: trzymaj się tego, co ludzie oczekują, lub dokumentuj to werbalnie. To bardzo interesujące, jak rzadko łamiesz "zasady", jeśli musisz napisać dogłębne wyjaśnienie, co robisz, dlaczego to robisz i które "czystsze" podejdą do ciebie i zostaną odrzucone. Ale patrząc na ten 3 letni kod zdaję sobie sprawę, że powinienem użyć 'call_user_func' –

6

Co powiesz na ten szalony hack?

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

Sprawdź ten trick:

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() zostanie wywołana jako funkcja, a wyrażenie w nawiasach będą oceniane jak każdy inny kod PHP.

hack is found here

Powiązane problemy