【问题标题】:PHP Class $_SERVER Variable a PropertyPHP 类 $_SERVER 变量一个属性
【发布时间】:2011-10-22 08:39:57
【问题描述】:

我正在开发一个类,我有这样的结构:

class userInfo {
    public $interval        = 60;
    public $av_langs        = null;

    public $ui_ip           = $_SERVER['REMOTE_ADDR'];
    public $ui_user_agent   = $_SERVER['HTTP_USER_AGENT'];

    public $ui_lang         = null;
    public $ui_country      = null;

    // non-relevant code removed
}

但在执行脚本时出现此错误:

解析错误:语法错误,意外的 T_VARIABLE 在 D:\web\www\poll\get_user_info\get_user_info.php 在第 12 行

当我将 2 个 $_SERVER 变量更改为简单字符串时,错误消失了。

那么 $_SERVER 在声明类属性时有什么问题呢?

谢谢

【问题讨论】:

标签: php class properties


【解决方案1】:

将此代码用作指南:

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

【讨论】:

    【解决方案2】:

    属性只能用值声明,不能用表达式声明。
    您可以创建 __construct() 方法,您可以在其中以任何方式初始化属性。

    【讨论】:

    • 好的,你能给我一个简单的例子吗?我不太习惯上课。
    • 我做了简单的 set_ip() 和 get_ip() 函数并把 $ui->set_ip($_SERVER['REMOTE_ADDR']); $ui->get_ip();它有效,但为什么不直接声明呢?
    • @medk 因为$_SERVER['REMOTE_ADDR'] 是表达式,并且该范围内不允许表达式(因为任何表达式只能在运行时获取)。 __construct() 是“魔术”方法,您可以在其中以任何方式初始化所有属性。 Read more in manual
    【解决方案3】:

    那么 $_SERVER 在声明类属性时有什么问题呢?

    您不能使用变量或函数调用预设类属性。

    这里有一些关于原因的深入讨论:Why don't PHP attributes allow functions?

    然而,最重要的是,这根本不可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2013-02-10
      • 2011-07-19
      • 2019-08-05
      • 2017-05-08
      • 2018-06-10
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多