我有一个PHP类方法,它使用另一个类的静态函数。如何启用静态函数来修改调用类中的变量。示例如下:
PARENT:
class sys_core
{
public $test = 'no';
// --------------------
public function __construct()
{
}
// --------------------
public function init()
{
sys_loader::load_config('123');
print $this->test;
}
// --------------------
// --------------------
// --------------------
// --------------------
// --------------------
} // END Class
静态课程
class sys_loader
{
private $registry = array();
// --------------------
public static function load_config($file)
{
$this->test = 'yes';
}
// --------------------
// --------------------
// --------------------
// --------------------
} // END Class
ERROR:
Fatal error: Using $this when not in object context
答案 0 :(得分:2)
在我看来,sys_loader可以修改sys_core的$ test 3方式:
1)sys_loader传递对sys_core-> test,
的引用
2)sys_loader为它返回一个新值或
3)为sys_core配备一个用于$ test的setter,并向sys_loader传递对sys_core的引用
通过该引用,sys_loader可以访问sys_core允许的任何变量和函数。
以下是我更改/添加以使#3工作的位:
使用示例:
$sc = new sys_core();
$sc->setConfigFile('123');
$sc->init();
输出:
123yes
class sys_core
// new
private $configFile = null;
// new
function getConfigFile() {
return $this->configFile;
}
// new
function setConfigFile($value) {
$this->configFile = $value;
}
// new
function setTest($value) {
$this->test = $value;
}
public function init()
{
// sys_loader::load_config('123');
sys_loader::load_config($this);
print $this->test;
}
class sys_loader
// public static function load_config($file)
public static function load_config($caller)
{
// $this->test = 'yes';
$caller->setTest('yes');
// new, example
$config = $caller->getConfigFile();
// new, example
echo $config;
}
答案 1 :(得分:1)
如果有帮助,您可以将对sys_core实例的引用作为参数传递给sys_loader :: load_config方法:
class sys_core
{...
public function init()
{
sys_loader::load_config('123', $this);
print $this->test;
}
...
}
class sys_loader
{
...
// --------------------
public static function load_config($file, $core)
{
$core->test = 'yes';
}
...
}
答案 2 :(得分:0)
你做不到。根据定义,static
表示不依赖于任何对象。 (你想在这里完成什么?)
静态方法是每个类,它们可以接受参数并修改static个变量。弄清楚你需要什么,绘制图表并实现它。
答案 3 :(得分:0)
您可以访问该类之外的任何公共成员,私有成员只能由类本身访问,受保护的成员可以通过子类访问。
self
用于静态成员......每个类一个。
this
用于非静态成员......每个实例一个。