Функция PHP не работает

#php

#php

Вопрос:

Я просто пытаюсь написать функцию, которая может переключать цвет фона.

При каждом запуске она должна возвращать другой цвет, но это не работает

 function bgcolour_switch(){
    if(!isset($p)){
        global $p;
        $p = "#C0C0C0";
        return $p;
    }else{
        if($p == "#C0C0C0"){
            $p = "#FFFFFF";
            return $p;
        }elseif($p == "#FFFFFF"){
            $p = "#C0C0C0";
            return $p;
        }
    }
}
  

Я продолжаю возвращать тот же цвет (#C0C0C0)

Комментарии:

1. Выполняется ли это один раз на страницу или несколько раз? Если это один раз на страницу, то вам нужно сохранить предыдущий цвет фона в сеансе или файле cookie, потому что HTTP не имеет состояния. Кроме того, $ p никогда не будет установлен при тестировании isset.

Ответ №1:

Ну, $p никогда изначально не устанавливается в области вашей функции, поэтому оператор if всегда принимает значение true.

Попробуйте переместить global $p; строку в начало функции, перед оператором if.

Ответ №2:

$p — это локальная переменная. Ее область действия — это сама функция. Каждый раз, когда вы вызываете эту функцию, она сбрасывается, поэтому isset($p) в первой строке никогда не будет оцениваться как true.

Если $p является глобальной переменной, добавьте следующую строку в начале вашей функции (над if).

 global $p;
  

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

 function bgcolour_switch(){
  global $p;
  if(!isset($p) || $p === "#FFFFFF")
    $p = "#C0C0C0";
  else
    $p = "#FFFFFF";
  return $p;
}
  

Ответ №3:

Вызовите, global прежде чем проверять, $p существует ли. Попробуйте это (непроверено):

 <?php
function bgcolour_switch(){
    global $p;
    if(!isset($p)){
        $p = "#C0C0C0";
        return $p;
    }else{
        if($p == "#C0C0C0"){
            $p = "#FFFFFF";
            return $p;
        }elseif($p == "#FFFFFF"){
            $p = "#C0C0C0";
            return $p;
        }
    }
}
  

Ответ №4:

Для функции требуется $ p

 function fname($p = null){
//such and such..
}