PHP - определить, используется ли функция для присвоения значения переменной - PullRequest
1 голос
/ 03 декабря 2010

поэтому у меня есть две функции, подобные этой:

function boo(){
  return "boo";
}

и

function foo(){
  echo "foo";
}

первая вернет значение, а вторая выведет что-то на экран напрямую.

$var = boo();
foo();

Как я могу объединить эти две функции в одну и каким-то образом определить, вызывается ли она для вывода результата на экран или она вызывается для получения возвращаемого значения?Затем выберите использовать возврат или эхо ...

Ответы [ 4 ]

3 голосов
/ 03 декабря 2010
function boo_or_foo ($output = false) {
    if ($output) {
        echo "fbo";
    } else {
        return "foo";
    }
}

Но какая польза от использования одной функции (boo()) и ее повторения самостоятельно?

echo $boo();
1 голос
/ 08 февраля 2011

Я хотел добиться того же эффекта. В моем случае у меня есть функции, которые генерируют HTML, который я хочу иногда отображать напрямую (при выполнении вызова Ajax) или возвращать (когда выполняется вызов из другого скрипта).

Например, функция, которая создает список элементов HTML <option> - listOfOption($filter). Когда одна из моих страниц создается впервые, вызывается функция, и результат отображается на месте:

<?= listOfOption($var) ?>

Но иногда одни и те же данные должны быть получены при вызове Ajax:

http://site.com/listOfOption.php?parameter=2

Вместо того, чтобы писать два разных сценария или указывать поведение параметра, я сохраняю listOfOption($filter) в своем собственном файле, например:

if (__FILE__ == $_SERVER['SCRIPT_FILENAME'])
{
    echo listOfOption($_REQUEST['parameter']);
}

function listOfOption($filter)
{
    return '<option value="1">Foo</option>';
}

Таким образом, если вызов выполняется из другого сценария, он возвращает данные; в противном случае он печатает данные.

Обратите внимание, что если параметр не передается в функцию, мне не нужно было бы этого делать, я мог бы постоянно повторять данные и заменять вызов <?= listOfOption() ?> на <? listOfOption() ?>, чтобы все было ясно. *

1 голос
/ 03 декабря 2010

Ну, функция должна делать только одно, поэтому обычно у вас есть две функции. Но если вы хотите объединить их, вы можете просто проверить, установлено ли:

function boo($var=null){
  if(isset($var)) echo $var
  else return "boo";
}
1 голос
/ 03 декабря 2010

хорошо возвращает true в функции, которая печатает, тогда вы просто делаете

function foo(){
  echo "foo";
  return true;
}

    if(foo()){
    echo "foo did print something";
    }else{
    echo "nope foo is broken";
    }
...