无法访问已更改的属性

时间:2016-08-07 09:51:57

标签: php

我已创建了一个名为Boot的类,在此我改变了文件路径的方法中,因此用户可以调用它来设置自定义路径,如下所示:

class Boot
{
    private static $_filePath = 'directory/';

    public function __construct()
    {
        require 'system.php';
    }

    public function init()
    {
         new System();
    } 

    public function setFilePath($newDir)
    {
        $this->_filePath = $newDir;
    }

    public static function getFilePath()
    {
        return self::_filePath;
    }
} 

所以在我的index.php文件中:

require 'boot.php';

$b = new Boot();
$b->setFilePath('directories/');
$b->init();

现在在系统类中我调用这样的东西:

echo Boot::getFilePath();

并应显示directories/,但我再次看到默认值:directory

现在我虽然这个问题与static字段有关,但是如何才能访问更改后的值呢?谢谢。

1 个答案:

答案 0 :(得分:1)

使用和不使用static定义的类变量是不同的变量。

一种解决方案是从变量声明中删除static并更改getPath代码,因为您已经在Boot定义了new的实例:

class Boot
{
    private $_filePath = 'directory/';

    public function __construct()
    {
        require 'system.php';
    }

    public function init()
    {
         new System();
    } 

    public function setFilePath($newDir)
    {
        $this->_filePath = $newDir;
    }

    public function getFilePath()
    {
        return $this->_filePath;
    }
}

并将getFilePath()称为

echo $b->getFilePath();

另一种解决方案是更改setFilePathgetFilePath

public function setFilePath($newDir)
{
    // set STATIC variable
    self::$_filePath = $newDir;
}

public static function getFilePath()
{
    // get STATIC variable
    return self::$_filePath;
}

但最终这是一个糟糕的方法,因为你会犯错误决定是否需要访问static variableproperty of an object

所以做出决定会更好 - 要么你有一个Boot的实例并获得它的属性,要么你只有一个类中的静态方法而忘记Boot实例。