2017-01-02 6 views
-1

を動作していない私の作業コードです: - あなたは$user_agent = $_SERVER['HTTP_USER_AGENT'];が作動している見ることができるように設定するプライベート変数は、ここで

public static function getOperatingSys() { 

    $user_agent = $_SERVER['HTTP_USER_AGENT']; 

    $osPlatform = "Unknown OS"; 

    $osArray = array(
     '/windows nt 10/i'  => 'Windows 10', 
     '/windows nt 6.3/i'  => 'Windows 8.1', 
     '/windows nt 6.2/i'  => 'Windows 8' 
     ); 

    foreach ($osArray as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $osPlatform = $value; 
     } 

    } 

    return $osPlatform; 
} 

しかし、どのように私はこれに変換することができますが、私はprivate $user_agentを入れていますが、それは私はそれを使用することができます/私の機能でそれを呼び出す方法を、次に$_SERVER['HTTP_USER_AGENT'];に等しく、そのようどのように私はそれを作ることができます

private $user_agent; 

    public function __construct() { 
     $this->user_agent = $_SERVER['HTTP_USER_AGENT']; 
    } 

    public static function getOperatingSys() { 

     $osPlatform = "Unknown OS"; 

     $osArray = array(
      '/windows nt 10/i'  => 'Windows 10', 
      '/windows nt 6.3/i'  => 'Windows 8.1', 
      '/windows nt 6.2/i'  => 'Windows 8' 
      ); 

     foreach ($osArray as $regex => $value) { 

      if (preg_match($regex, $user_agent)) { 
       $osPlatform = $value; 
      } 

     } 

     return $osPlatform; 
    } 

を?:しますgetOperatingSys()

+2

私はこのエラーを取得する '場合(するpreg_match($正規表現、の$ this - > user_agentの)){' –

+0

@Anant:ない$これを使用する: '致命的なエラー:不明なエラーオブジェクトのコンテキストで ' – jasonmoqio

答えて

2

最初に変更する必要があるのは、getOperatingSysをもはや静的関数にしないことです。次に、user_agentを参照するときに$ this->を使用することです。以下のような何か作業をする必要があります:

private $user_agent; 

public function __construct() { 
    $this->user_agent = $_SERVER['HTTP_USER_AGENT']; 
} 

public function getOperatingSys() { 

    $osPlatform = "Unknown OS"; 

    $osArray = array(
     '/windows nt 10/i'  => 'Windows 10', 
     '/windows nt 6.3/i'  => 'Windows 8.1', 
     '/windows nt 6.2/i'  => 'Windows 8' 
     ); 

    foreach ($osArray as $regex => $value) { 

     if (preg_match($regex, $this->$user_agent)) { 
      $osPlatform = $value; 
     } 

    } 

    return $osPlatform; 
} 
+0

ちょうど質問:静的を削除する理由は?私は理解していない、ありとあらゆる – jasonmoqio

+1

クラスで何かを宣言すると、すぐにオブジェクト指向プログラミングが使用されています。オブジェクト指向プログラミングでは、状態を操作するか、操作を実行するために実行できる状態と操作を持つクラスを定義しています。静的でない関数は、変更可能な状態を持つクラスの特定のインスタンスを指します。一方、静的な関数は特定のインスタンスを参照しないので、特定のインスタンス内の変数にアクセスすることはできません。 http://php.net/manual/en/language.oop5.static.php – Brian

+0

okありがとうございます。今私の元の作業コードで(私はあなたのコードに変更した)、どちらが良いですか?私の元のコードか新しいコード? – jasonmoqio

関連する問題