解析错误:语法错误,意外'公共' (T_PUBLIC)in

时间:2014-09-22 13:52:35

标签: php

我有这个用于PHP重定向的类:

<?PHP
public static function redirect($uri,$code=302)
{
    // Specific URL
    $location = null;
    if (substr($uri,0,4)=='http') {
        $location = $uri;
    } else {
        $location = self::base(true);
        // Special Trick, // starts at webserver root / starts at app root
        if (substr($uri,0,2) == '//') {
            $location .= '/' . ltrim($uri,'/');
        } elseif (substr($uri,0,1) == '/') {
            $location .= '/' . ltrim($uri,'/');
        }
    }

    // $sn = \$_SERVER['SCRIPT_NAME'];
    // $cp = dirname($sn);
    // $schema = \$_SERVER['SERVER_PORT']=='443'?'https':'http';
    // $host = strlen(\$_SERVER['HTTP_HOST'])?\$_SERVER['HTTP_HOST']:\$_SERVER['SERVER_NAME'];
    // if (substr($to,0,1)=='/') $location = "$schema://$host$to";
    // elseif (substr($to,0,1)=='.') // Relative Path
    // {
    //   $location = "$schema://$host/";
    //   $pu = parse_url($to);
    //   $cd = dirname(\$_SERVER['SCRIPT_FILENAME']).'/';
    //   $np = realpath($cd.\$pu['path']);
    //   $np = str_replace(\$_SERVER['DOCUMENT_ROOT'],'',$np);
    //   $location.= $np;
    //   if ((isset(\$pu['query'])) && (strlen(\$pu['query'])>0)) $location.= '?'.\$pu['query'];
    // }
    // }

    $hs = headers_sent();
    if ($hs === false) {
        switch ($code) {
        case 301:
            // Convert to GET
            header("301 Moved Permanently HTTP/1.1",true,$code);
            break;
        case 302:
            // Conform re-POST
            header("302 Found HTTP/1.1",true,$code);
            break;
        case 303:
            // dont cache, always use GET
            header("303 See Other HTTP/1.1",true,$code);
            break;
        case 304:
            // use cache
            header("304 Not Modified HTTP/1.1",true,$code);
            break;
        case 305:
            header("305 Use Proxy HTTP/1.1",true,$code);
            break;
        case 306:
            header("306 Not Used HTTP/1.1",true,$code);
            break;
        case 307:
            header("307 Temporary Redirect HTTP/1.1",true,$code);
            break;
        }
        header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
        header("Location: $location");
    }
    // Show the HTML?
    if (($hs==true) || ($code==302) || ($code==303)) {
        // todo: draw some javascript to redirect
        $cover_div_style = 'background-color: #ccc; height: 100%; left: 0px; position: absolute; top: 0px; width: 100%;';
        echo "<div style='$cover_div_style'>\n";
        $link_div_style = 'background-color: #fff; border: 2px solid #f00; left: 0px; margin: 5px; padding: 3px; ';
        $link_div_style.= 'position: absolute; text-align: center; top: 0px; width: 95%; z-index: 99;';
        echo "<div style='$link_div_style'>\n";
        echo "<p>Please See: <a href='$uri'>".htmlspecialchars($location)."</a></p>\n";
        echo "</div>\n</div>\n";
    }
    exit(0);
}
?>

我重定向使用:

redirect("http://www.foo.bar/page.htm",303)

但是在页面中我看到了这个错误:解析错误:语法错误,意外&#39;公共&#39;第2行的C:\ xampp \ htdocs \ user \ class \ main.class.php中的(T_PUBLIC)

如何修复此错误?!

2 个答案:

答案 0 :(得分:8)

删除public static

这些关键字用于类中的函数定义。

替代方案:在函数周围定义一个类,这也将处理其他类相关的引用:

class MyClass {
// your function here
}

然后你可以这样调用你的函数:

MyClass::redirect();

答案 1 :(得分:1)

对于删除错误,定义一个类

class Foo
{
    public static function redirect($uri,$code=302) {
       // your function body
    }
}

并调用函数如: -

Foo::redirect("http://www.foo.bar/page.htm",303);

或删除public static并包含调用函数的文件