Php 在 class 上访问静态方法

Php access a static method on class

首先我是 OOP 新手。对不起,如果这是一个菜鸟问题。

我正在构建一个多语言网站。我正在使用 languga iso 获取数据库值。例如:index.php?lang=en 如果使用 $_GET 参数设置了语言值,mysql 只会在数据库中带来 en 值。问题出在我的 LanguageController 上。

// LanguageController Class
class LanguageController {
    public $lang = "en";
    public function __construct() {
        return true;    
    }
    public static function detectLang() {
        $lang = 'en';
        ob_start();
        session_start();
        if(isset($_GET["lang"])) {
            $lang= $_GET["lang"];
            $_SESSION["lang"] = $lang;
            setcookie("lang", $lang, time() + (3600 * 24 * 30));
        }
        else {
            $lang = 'en';
            $_SESSION["lang"] = $lang;
            setcookie("lang", $lang, time() + (3600 * 24 * 30));
            return true;
        }
    }
}

我想为 'en' 等传递默认的 $lang 参数。 如果客户端将语言更改为 'fr',我必须开始会话。 mysql 带来 'fr' 语言值。 我如何在我的 detectLang() 方法上传递我的 $lang 参数。

我试过了var_dump(LanguageController::detectLang()) 即将到来 NULL.

任何帮助都非常适用。

在静态方法中你只能引用静态属性。简单来说,$lang 也需要是静态的,即

public static var $lang = "en";

当函数中没有 return 语句时 - 返回值为 NULL。显然你的 detectLang 函数有效并且 isset($_GET["lang"]) 条件是 true,在这种情况下返回值是 NULL.