簡體   English   中英

如何在PHP類中為私有靜態變量正確分配值?

[英]How can i correctly assign a value to a private static variable in PHP class?

我有一個翻譯語言數組庫的類。 因此,問題在於該語言不會根據Cookie值進行更改。

此函數應設置語言值,但不設置。 看來,無論我做什么,我總是得到“ ar”作為self :: $ currlang值。 我該如何解決這個問題?

public function _set(){

    if( $_COOKIE['defaultLang'] != '' ) {
        self::$currlang = $_COOKIE['defaultLang'];
    } else {
        //this is the default language
        self::$currlang = 'ar';
    }

}

這是我的代碼

謝謝你的幫助 :)

<?php
include('../langs/english.php');
include('../langs/arabic.php');

class Translator{
    private static $strs = array();
    private static $currlang = "";


    public function _set(){

        if( $_COOKIE['defaultLang'] != '' ) {
            self::$currlang = $_COOKIE['defaultLang'];
        } else {
            //this is the default language
            self::$currlang = 'ar';
        }

    }


    public static function loadTranslation($lang, $strs){
        if (empty(self::$strs[$lang]))
            self::$strs[$lang] = array();

        self::$strs[$lang] = array_merge(self::$strs[$lang], $strs);        
    }

    public static function setDefaultLang($lang){
        self::$currlang = $lang;        
    }

     public static function getDefaultLang(){
        return self::$currlang;        
    }

    public static function translate($key, $lang=""){
        if ($lang == ""){
            $lang = self::$currlang;
        }
        $str = self::$strs[$lang][$key];
        if (empty($str)){
            //$str = "$lang.$key"; 
            $str = 'Language "'. $lang . '", '. $key . ' is not defined.';           
        } 
        return $str;       
    }    

    public static function freeUnused(){
        foreach(self::$strs as $lang => $data){
            if ($lang != self::$currlang){
                $lstr = self::$strs[$lang]['langname'];
                self::$strs[$lang] = array();
                self::$strs[$lang]['langname'] = $lstr;                
            }            
        }        
    }

    public static function getLangList(){
        $list = array();
        foreach(self::$strs as $lang => $data){
            $h['name'] = $lang;
            $h['desc'] = self::$strs[$lang]['langname'];
            $h['current'] = $lang == self::$currlang;
            $list[] = $h;
        }
        return $list;        
    }

    public static function &getAllStrings($lang){
        return self::$strs[$lang];
    }

}

?>

_set()魔術方法與->運算符一起使用,該運算符與實例化的對象一起使用。 您不能將靜態成員變量與實例化對象一起使用,而是一個或另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM