【问题标题】:php singleton object not created未创建php单例对象
【发布时间】:2012-05-10 17:10:41
【问题描述】:

我正在尝试了解 OOP,并创建一个单例以在 PHP 脚本中返回一个设置对象。出于某种原因,该实例似乎永远不会被设置。

每当单例通过其构造时,我都会回显一条消息getting settings(如果它只返回现有实例,则它是静默的)。

当从脚本中调用它时,我会收到数十条 getting settings 消息,每次我调用 mySettings::getSettings() 时都会收到一条消息——$instance 似乎没有被创建,即使我尝试在创建后立即转储它。

谁能指出我哪里出错了?

代码如下:

class mySettings {
    private $settings;
    private static $instance;

    private function __construct(){
        $configfile = "myconfig.ini";
        if(!$this->settings = parse_ini_file( $configfile )){
            die('CONFIG NOT FOUND/PARSED');
        }
    }

    public static function getSettings(){
        if ( !self::$instance ){
            echo "getting settings-- no instance found!";
            self::$instance = new mySettings();
            var_dump(self::$instance); // <-- dumps nothing
        }
        return self::$instance;
    }

    public function setParam( $key, $value ){
        $this->settings[$key] = $value;
    }

    public function getParam( $key ){
        return $this->settings[$key];
    }
}

【问题讨论】:

  • 测试了你的代码。工作。
  • @julio、webbiedave 和我都让它正常工作。也许其他地方(该课程之外)出了问题。
  • 感谢各位的帮助。我将更新可能存在问题的其他功能并查看这些功能。
  • 代码完全正常。我认为错误在其他地方。你能展示你的真实代码吗?

标签: php oop singleton


【解决方案1】:

您创建单例的方法看起来是正确的。

尝试使用空的构造函数,那里的 die() 语句可能存在问题。

【讨论】:

  • 如果它快死了,它会说死信息,不是吗?
  • @Kristian-- 是的,事实上 die 语句是可操作的,如果我给配置文件一个错误的路径或一个空值,它就会死掉。另外,如果我将$var = mySettings::getSettings() 返回的值转储到别处,它确实具有预期值。
【解决方案2】:

// &lt;-- dumps nothing 是否意味着您看到“NULL”被渲染或什么都没有?

也许你有一些隐藏 var_dump() 输出的输出缓冲。

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2015-02-22
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多