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

Я хотел бы использовать urlencode() функцию:Как использовать функцию внутри строки?

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

... но я не могу использовать это:

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

... потому что $1 не является переменной в строке ; вместо этого это мета-переменная в простом свободном форуме.

это отправить http://www.test.com/out.php?out=http://www.example.com

ответ

2

Вы не можете это сделать. Вам нужно закодировать значение, в котором оно создано, или где оно заменено в этой строке, а не в этом шаблоне, где у вас нет доступа к нему.

2

Я только что просмотрел string parsing section of the PHP manual и не существует способа вызова функции из строки с кавычками (кроме динамического назначения имени переменной). Сожалею.

0

Вам необходимо расширить, как работает ваш шаблонный двигатель, чтобы поддержать это. Невозможно заставить PHP сделать это за вас.

3

Существует способ сделать это, но, примите мои советы и не используйте его. вы не должны использовать вызовы функций внутри строк. Однако я опубликую пример, чтобы показать, на что способен PHP.

НО ЭТО ЭКСТРЕМАЛЬНЫЙ ОБРАЗЕЦ ПЛОХОГО ПРОГРАММИРОВАНИЯ !!!!

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

Ваше предупреждение отражает мою интуицию. Но единственная проблема с этим я действительно могу объяснить, так это то, что это незнакомое соглашение. Классы/объекты действительно [плохая практика] (http://en.wikipedia.org/wiki/Poltergeist_ (computer_science)) - _ в контексте ООП. Если 'FunctionAgent' облегчает жизнь dev (и каждый миллисекунда времени выполнения скрипта не вызывает беспокойства), почему бы не использовать его? –

+1

@smhmic Мое золотое правило: придерживайтесь того, что люди ожидают или документально документируют. Очень интересно, насколько редко вы тормозите «правила», если вам нужно написать подробное объяснение того, что вы делаете, почему вы это делаете и какой «чище» подходит к вам и рассматривается. Но, глядя на этот трехлетний код, я понимаю, что должен использовать 'call_user_func' –

6

как насчет этого сумасшедшего взлома?

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

Заканчивать этот трюк:

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() будет называться как функция, а выражение в скобках будет оцениваться как и любой другой PHP кода.

hack is found here

Смежные вопросы