2014-03-27 24 views
0

我有一个类方法,它从一个独立的类调用静态方法。有没有办法让静态方法可以设置调用它的类的公共属性?这是一个基本的例子:php我可以在外部静态方法中设置类属性,该方法由类的非静态方法调用,如果是这样的话?

<?php 

class MyClass { 

    public $status; 

    public function before() { 
     Helper::setStatus(); 
    } 

    public function after() { 
     echo $this->status; 
    } 

} 

class Helper { 

    public static function setStatus() { 
     parent()->status = "new"; 
    } 

} 

$myclass = new MyClass(); 
$myclass->before(); 
$myclass->after(); //would hopefully echo "new" 

parent()方法只然而一个占位符,你居然会做;我知道MyClass不是Helper的母公司。

这可能吗?我可能以这种错误的方式来解决这个问题吗?

感谢您的阅读。

回答

2

您需要将该类的一个实例传递给静态方法。其中一个方法内可能只是$this

例子:

class MyClass { 

    public $status; 

    public function before() { 
     Helper::setStatus($this); 
    } 

    public function after() { 
     echo $this->status; 
    } 

} 

class Helper { 

    public static function setStatus($instance) { 
     $instance->status = "new"; 
    } 

} 

$myclass = new MyClass(); 
$myclass->before(); 
$myclass->after(); //would hopefully echo "new" 

//you could also set the status from outside by calling the static method 
//and passing in your instance. 
Helper::setStatus($myclass); //same as calling before. 

演示:http://codepad.viper-7.com/zW2etr

+0

DOY!真棒。谢谢。 – chiliNUT

0

您可以通过MyClass的实例,以辅助类可以通过$this

注访问:如果你通过任何类的实例意味着它将通过 Call By Reference默认。

​​

相关问题