Переключатель PHP внутри пользовательской функции ничего не выводит - PullRequest
0 голосов
/ 26 марта 2011

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

    function testfunc() {
    switch ($currentplace) { 
    case 1: 
    echo $thumb1;
    break; 

    case 2: 
    echo $thumb2;
    break; 

    case 3: 
    echo $thumb3;
    break; 

    case 4: 
    echo $thumb4;
    break; 
     }
}

Затем, позже я вызываю функцию следующим образом:

//SET CASE FOR THUMB1 
$currentplace = $place1;
testfunc();

А потом, где-нибудь еще, но для второй переменной

//SET CASE FOR THUMB2 
$currentplace = $place2;
testfunc();

?>

Кто-нибудь подскажет, что я делаю не так?

Ответы [ 8 ]

2 голосов
/ 26 марта 2011

Измените свой код следующим образом:

function testfunc($currentplace) {
...
}

testfunc($currentplace);

// or testfunc($place1);  

Таким образом, вы можете передать переменную в функцию, чтобы она могла ее использовать.Обратите внимание, что имена не должны совпадать (см. Закомментированную строку).

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

1 голос
/ 26 марта 2011

Вы используете эту часть кода:

$currentplace = $place1;
testfunc();

И ваша функция testfunc() выглядит следующим образом:

function testfunc() {
    switch ($currentplace) { 
    // ...

Но * ваша $currentplace переменная, объявленная вне функции, не видна изнутри функции : функции представляют свою собственную область видимости переменной.


У вас есть два возможных решения:

  • либо, в начале функции, импортируйте переменную, используя ключевое слово global (которое не совсем хорошее решение - так как оно делает функциюзависит от внешней переменной.)
  • Или, лучше, передать вашу переменную в функцию в качестве параметра.


Используя первое, плохо , идея, ваша функция будет определена так:

function testfunc() {
    global $currentplace;  // Make the outside variable visible from inside the function
    switch ($currentplace) { 
    // ...

Для получения дополнительной информации смотрите раздел Variable руководства.


И, используя второе, гораздо лучшее решение, это будет определеновот так:

function testfunc($currentplace) {
    switch ($currentplace) { 

И называется так:

testfunc($place1);
testfunc($place2);

И для получения дополнительной информации об этом посмотрите Аргументы функции раздел руководства по PHP.

1 голос
/ 26 марта 2011

Вам нужно передать вашу переменную в вашу функцию.

Например:

function testfunc($currentplace) {
  // your code here
}


testfunc($place1);

testfunc($place2);

А что касается $currentplace, ваша $thumb не определена как ваша функция.

Вы можете найти больше информации о области видимости переменных в руководстве .

0 голосов
/ 26 марта 2011

Это вопрос охвата . $currentplace, который вы установили на $place1/2, не виден внутри testfunc. $currentplace внутри testfunc - это другая переменная с одинаковым именем. (В противном случае было бы довольно сложно написать код, если бы мы беспокоились о том, какие имена могли бы использовать другие люди.)

Самым простым решением было бы получить внешнюю (глобальную) $currentplace в область действия testfunc, в случае PHP с использованием объявления global, но это считается плохой практикой (потому что нам не нужны функции излишнее изменение внешних переменных). Наиболее приемлемой практикой будет передача $currentplace в качестве параметра, который, я уверен, уже дан ответ на многочисленные другие ответы.

Пока мы занимаемся этим, полезно также, чтобы функции не делали никаких предположений о том, как они будут использоваться. Я имею в виду ваши echo заявления, которые выводятся на стандартный вывод. Если позднее вы решили собрать выходные данные в строковую переменную перед их выводом, вам придется изменить testfunc. Однако если бы testfunc просто return отредактировал строку, было бы просто сказать echo testfunc($currentplace); или $place = testfunc($currentplace); в зависимости от ваших потребностей.

0 голосов
/ 26 марта 2011

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

Лучше передать переменную в качестве аргумента функции.

0 голосов
/ 26 марта 2011

Вы должны поместить global $currentplace; в testfunc(). Но вы не можете просто использовать массив вместо $thumb s?

0 голосов
/ 26 марта 2011

echo $thumb1; отобразит переменную, которая не существует в области действия функции.Я предполагаю, что это глобальная переменная, и в этом случае вы должны сначала объявить ее с помощью global $thumb1; (то же самое относится и к другим "большим").возможно забыли передать его как параметр функции?

0 голосов
/ 26 марта 2011

Полагаю, это не соответствует ни одной метке. Сохраните оператор default и попытайтесь повторить значение $currentplace.

function testfunc() 
{
    switch ($currentplace) 
    {
       // .....

       default: echo $currentplace ;
                break ;
    }
}
...