我已创建了一个名为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
字段有关,但是如何才能访问更改后的值呢?谢谢。
答案 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();
另一种解决方案是更改setFilePath
和getFilePath
:
public function setFilePath($newDir)
{
// set STATIC variable
self::$_filePath = $newDir;
}
public static function getFilePath()
{
// get STATIC variable
return self::$_filePath;
}
但最终这是一个糟糕的方法,因为你会犯错误决定是否需要访问static variable
或property of an object
。
所以做出决定会更好 - 要么你有一个Boot
的实例并获得它的属性,要么你只有一个类中的静态方法而忘记Boot
实例。