【问题标题】:Php access a static method on classphp访问类上的静态方法
【发布时间】:2015-03-31 18:57:30
【问题描述】:

首先我是 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

非常感谢任何帮助。

【问题讨论】:

    标签: php oop parameter-passing multilingual


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。我添加了return $lang 值,它返回string 'en' (length=2)
    【解决方案2】:

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

    public static var $lang = "en";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 2011-08-19
      • 1970-01-01
      • 2011-07-31
      • 2011-11-03
      • 2017-01-03
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多