2014-01-15 4 views
1

Предположим, что я хочу отправить эффект через аргумент функции, могу ли я также отправить дополнительные аргументы через это, не могу это объяснить, вот как бы я мог представить его.PHP отправляет дополнительные (необязательные) аргументы через аргументы функции

<?php 
//Apply photo effects 
function applyEffect($url,$effect) { 
    //List valid effects first 


    $img = imagecreatefromjpeg($url); 

    //Testing 
    if($img && imagefilter($img, $effect)) { 
     header('Content-Type: image/jpeg'); 
     imagejpeg($img); 

     imagedestroy($img); 
    } else { 
     return false; 
    } 
} 

applyEffect("http://localhost:1234/ppa/data/images/18112013/0/image3.jpg",IMG_FILTER_BRIGHTNESS[20]); 
?> 

Как вы можете видеть, я прохожу IMG_FILTER_BRIGHTNESS через аргументы функции, но фильтр я использую потребности дополнительный аргумент, который неплохо было бы послать, когда я вызываю функцию applyEffect, например, так: IMG_FILTER_BRIGHTNESS [20 ]

Но это не работает, любые указатели?

+0

Это действительно такое же количество символов, так или иначе. Вы также можете использовать запятую и передавать ее в обычном режиме. На самом деле это меньше с запятой, если вы не используете пробел. – m59

+0

Но тогда мне пришлось называть такую ​​функцию: 'function applyEffect ($ url, $ effect, $ arg1, $ arg2, $ arg3) {' –

+0

Но теперь, поскольку дополнительные аргументы не имеют значения, если они не нужны, ошибка брошена .. –

ответ

2

Похоже, вы хотели бы func_get_args, а затем вы могли бы создать аргументы для следующего вызова функции из этого и использовать его как call_user_func_array(theFunction, $args).

function applyEffect($url, $effect, $vals) { 
    $img = makeImage($url); 

    //get an array of arguments passed in 
    $args = func_get_args(); 

    //update the first item with the changed value 
    $args[0] = $img; 

    //get rid of the 3rd item, we're about to add on its contents directly to $args array 
    unset($args[2]); 

    //add all the optional arguments to the end of the $args array 
    $args = array_merge($args, $vals); 

    //pass the new args argument to the function call 
    call_user_func_array(imagefilter, $args); 
} 

applyEffect('foo.jpg', 'DO_STUFF', array(20,40,90)); 


function imageFilter() { 
    $args = func_get_args(); 
    foreach ($args as $arg) { 
    echo $arg.'<br>'; 
    } 
} 

function makeImage($url) { 
    return "This is an image."; 
} 

Вы можете также установить значения аргументов по умолчанию на функции, как это:

function foo($arg1, $arg2=null, $arg3=null) { }

+0

Спасибо! Работает отлично –

+0

@MartynLeeBall Я обновил о первом решении. Вы также можете быть заинтересованы в этом. Он позволяет вам передавать сколько угодно значений, и окончательная функция будет вызываться со всеми из них. – m59

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