Простая функция PHP и путаница переменных - PullRequest
0 голосов
/ 27 августа 2010

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

<?php 

/* User agent function */
function userAgent(){
    $browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
    if ($browser == true)  { $var = 1; }
    return $var;
}

/* Image resize function */
function imageResize($width, $height) { 

    $var = userAgent($var);

    if($var == 1){
        $width = round($width / 2); 
        $height = round($height / 2); 
    }else{
        $width = round($width);
        $height = round($height);
    }

    echo "width=\"$width\" height=\"$height\""; 
} 

?>

Проблема в том, если я вручную изменю $ var на 0 или 1 в функции userAgent ()изображения не меняются, но если я изменю $ var на == 0 в функции imageResize (), они изменятся.

Почему переменная не переносится из первой в вторую функцию или я что-то не так делаю?

Ответы [ 3 ]

5 голосов
/ 27 августа 2010

strpos никогда не возвращается true.Вам нужно будет проверить на $browser != false, иначе ваша функция никогда не распознает iPhone.

Однако ваш код излишне сложен, и возвращать целое число здесь не очень полезно.Я бы порекомендовал упрощенную переписать:

// Make it return `true` or `false` instead of `1`, also make it universal
function isAgent($string)
 {
    return (strpos($_SERVER['HTTP_USER_AGENT'],$string) !== false);
 }


/* Image resize function */
function imageResize($width, $height) { 

    if(isAgent("iPhone")){
        $width = round($width / 2); 
        $height = round($height / 2); 
    }else{
        $width = round($width);
        $height = round($height);
    }
    // Consider using CSS
    echo "style=\"width: {$width}px; height: {$height}px;\""; 
} 
3 голосов
/ 27 августа 2010

Похоже, что вы возвращаете $var, только если пользовательский агент - iPhone, в противном случае вы пытаетесь вернуть неопределенную переменную (в вашей функции userAgent)

попробовать:

function userAgent(){
    $browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
    $var = 0;

    if ($browser !== false)  { $var = 1; }
    return $var;
 }
0 голосов
/ 27 августа 2010

Ожидаете ли вы, что аргумент $var будет обработан функцией userAgent?В этом случае вам необходимо указать его в качестве аргумента.

function userAgent( $var ) {
...

В противном случае вы можете инициализировать $var в теле функции.Это мудрая стратегия, чтобы сохранить ваши if-then-else симметричными:

if( $browse ) {
   $var = 1;
} else {
   $var = 0;
}

И вы можете написать это более кратко, как

function userAgent() {
   $browser = .....
   return $browser ? 1 : 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...