简体   繁体   English

PHP在类上访问静态方法

[英]Php access a static method on class

First all i'm new on OOP. 首先,我是OOP的新手。 Sorry if this is a noob question. 抱歉,这是一个菜鸟问题。

I'm building a multilanguage web site. 我正在建立一个多语言的网站。 I'm fetching database values with languga iso's. 我正在使用languga iso的数据库值。 For eg: index.php?lang=en if language value is set with $_GET parameter, mysql brings only en values in database. 例如: index.php?lang=en如果语言值是使用$ _GET参数设置的,则mysql仅将en值带入数据库。 The problem is with my LanguageController. 问题出在我的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;
        }
    }
}

I want to pass default $lang parameter for eg 'en'. 我想传递默认的$ lang参数,例如'en'。 If client change language to 'fr', i must start a session. 如果客户将语言更改为“ fr”,我必须开始一个会话。 And mysql brings 'fr' language values. mysql带来了“ fr”语言值。 How can i pass my $lang parameter on my detectLang() method. 我如何在我的detectLang()方法上传递$lang参数。

I tried var_dump(LanguageController::detectLang()) It's coming NULL . 我尝试了var_dump(LanguageController::detectLang())它即将var_dump(LanguageController::detectLang()) NULL

Any help greatly appricated. 任何帮助极大地申请。

When there's no return statement in a function - returned value is NULL . 当函数中没有return语句时,返回值为NULL Obviously your detectLang function works and the isset($_GET["lang"]) condition is true , in this case the returned value is NULL . 显然,您的detectLang函数起作用并且isset($_GET["lang"])条件为true ,在这种情况下,返回值为NULL

In static methods you can only reference to static attributes. 在静态方法中,您只能引用静态属性。 In simple words, the $lang needs to be static as well ie 简单来说,$ lang也必须是静态的,即

public static var $lang = "en";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM