【问题标题】:Why are globals empty inside a class when the variabled are included?当包含变量时,为什么类中的全局变量为空?
【发布时间】:2009-08-12 15:22:35
【问题描述】:

我想要做的是有一个包含网站设置的单独 PHP 文件,然后让其他页面包含这个文件并根据设置执行代码。但是,每当我在类中使用 global 引用这些变量时,这些变量都是空的。例如:

settings.php:

<?php
$setting1 = 'on';
$setting2 = 'off';
?>

class.php:

<?php
require_once('./settings.php');

class myclass {
  public function __construct {
    global $setting1;
    echo $setting1;
  }
}

$object = new myclass;
?>

这不打印任何内容。但是,如果我在课堂外执行“echo $setting1”,它会打印“on”。当我尝试在文件本身中设置变量而不是包含它时,当我为 myclass 创建一个新对象时,打印为“on”。我需要做一些特别的事情来使包含的变量在类的全局范围内可用吗?

【问题讨论】:

  • 出于命名空间安全的原因,您可能需要考虑创建静态类而不是全局变量。要直接回答您的问题,看起来确实像其他人提到的括号问题。

标签: php class global


【解决方案1】:

您的构造函数在其名称后需要括号,例如

public function __construct() {

}

我怀疑这是给您一个致命错误,并且由于您的 display_errors / error_reporting 设置而没有显示。

【讨论】:

  • 谢谢。我添加了这个,但是我仍然面临同样的问题:包含的变量在类的全局范围内不可用。
【解决方案2】:

您缺少括号:

public function __construct {

应该是

public function __construct( ) {

结果:

$ php -v
PHP 5.2.5 (cli) (built: Nov 29 2007 09:31:38) 
2007-Macbook:Desktop mark$ php class.php
on

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多