简单的PHP函数和可变混淆

时间:2010-08-27 10:54:18

标签: php

我正在使用几个简单的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\""; 
} 

?>

问题是,如果我在userAgent()函数中手动将$ var更改为0或1,则图像不会调整大小,但如果我在imageResize()函数中将$ var更改为== 0,则做。

为什么变量没有从第一个函数传到第二个函数,或者我做错了什么?

3 个答案:

答案 0 :(得分:5)

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;\""; 
} 

答案 1 :(得分:3)

如果用户代理是iPhone,您似乎只返回$var,否则您尝试返回未定义的变量(在您的userAgent函数中)

尝试:

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

    if ($browser !== false)  { $var = 1; }
    return $var;
 }

答案 2 :(得分:0)

您希望$var函数处理userAgent参数吗?在这种情况下,您需要将其指定为参数。

function userAgent( $var ) {
...

否则,您可能希望初始化函数体中的$var。保持if-then-else对称是明智的策略:

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

你可以写一点比如

更简洁
function userAgent() {
   $browser = .....
   return $browser ? 1 : 0;
}