0

以下のコードは正常に動作します:

<?php session_start();

   $_SESSION['color'] = 'blue'; 

   class utilities
   {
            public static $color;

        function display()
            {
                echo utilities::$color = $_SESSION['color'];
            }

   }
   utilities::display(); ?>

これは私が欲しいものですが、うまくいきません:

<?php session_start();

$_SESSION['color'] = 'blue'; 

class utilities  {  
     public static $color = $_SESSION['color']; //see here

     function display()     
     {      
         echo utilities::$color;    
     }   } utilities::display(); ?>

次のエラーが表示されます。Parse error: syntax error, unexpected T_VARIABLE in C:\Inetpub\vhosts\morsemfgco.com\httpdocs\secure2\scrap\class.php on line 7

Php は、セッション変数が関数の外に格納されるのを好みません。なんで?それは構文の問題ですか、それとも何ですか?ユーティリティ関数を呼び出すだけで、いくつかのセッション変数をグローバルに保存する必要があるため、オブジェクトをインスタンス化する必要はありません。init()関数を実行するたびに、関数を呼び出してグローバル セッション変数を格納したくありません。ソリューション?

4

2 に答える 2

5

クラスでは、メソッドでのみ SESSION を使用できます...

実際、クラスで何かをしたい場合は、メソッドでコーディングする必要があります...

クラスは関数ではありません。いくつかの変数(属性として)といくつかの関数(メソッドとして)があります。変数を定義したり、初期化したりできます。ただし、メソッドの外で操作を行うことはできません...たとえば

public static $var1; // OK!
public static $var2=5; //OK!
public static $var3=5+5; //ERROR

このように設定したい場合は、コンストラクターを使用する必要があります... (ただし、オブジェクトが作成されるまでコンストラクターは呼び出されないことに注意してください...)

<?php 
session_start();

$_SESSION['color'] = 'blue'; 

class utilities  {  

    public static $color;

    function __construct()
    {
        $this->color=$_SESSION['color'];
    }

    function display()     
    {          
        echo utilities::$color;  
    }
}
utilities::display(); //empty output, because constructor wasn't invoked...
$obj=new utilities();
echo "<br>".$obj->color;
?>
于 2009-10-13T15:56:56.973 に答える
3

PHPマニュアルから:-

他の PHP 静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は使用できません。したがって、静的プロパティを整数または配列 (たとえば) に初期化することはできますが、別の変数、関数の戻り値、またはオブジェクトに初期化することはできません。

セッション変数をグローバルに保存する必要があるとおっしゃいましたか? 彼らは$_SESSIONいわゆる「スーパーグローバル」です

<?php

class utilities {
public static $color = $_SESSION['color']; //see here

 function display()   
 {      
     echo $_SESSION['color'];  
 }
}

utilities::display(); ?>
于 2009-10-13T15:30:47.260 に答える