下面的代码工作正常:
<?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()
函数来存储全局会话变量。溶液
答案 0 :(得分: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;
?>
答案 1 :(得分:3)
来自PHP manual: -
与任何其他PHP静态变量一样, 静态属性可能只是 使用文字或文字初始化 不变;表达式是不允许的。 所以你可以初始化静态 属性为整数或数组(for 例如),你可能不会初始化它 另一个变量,一个函数 返回值,或对象。
您说您需要将会话变量全局存储吗?他们是$_SESSION
,即所谓的"super global"
<?php
class utilities {
public static $color = $_SESSION['color']; //see here
function display()
{
echo $_SESSION['color'];
}
}
utilities::display(); ?>