2017-01-13 135 views
9

我正在研究PHP的代码。如何从同一类的静态方法调用非静态方法?

下面是示例代码来解释我的问题:

class Foo { 

    public function fun1() { 
      echo 'non-static'; 
    } 
    public static function fun2() { 
     echo "static" ; 
     //self::fun1(); 
     //Foo::fun1(); 
    } 
} 

我如何可以调用从静态方法非静态方法?

注:

两个功能在整个网站,这是不知道使用。 I 无法对它们的静态/非静态性质进行任何更改。

+0

我认为非静态方法只能由对象调用。因为它依赖于类和静态方法是独立的。 – C2486

+0

是的,但是在课堂上,怎么样?我应该在同一个类的函数中创建同一个类的对象吗? – rahulsm

+0

检查此:http://stackoverflow.com/a/2396427/2815635 – C2486

回答

21

必须静态方法来访问类中没有静态方法中创建一个新的对象:

class Foo { 

    public function fun1() { 
     echo 'non-static'; 
    } 

    public static function fun2() { 
     echo (new self)->fun1(); 
    } 
} 
+0

https://eval.in/715502 –

1

的主要区别是,你可以调用一个类的静态方法,而不必实例化该类的一个对象。 所以,在静态方法尝试

Foo $objInst = new Foo(); 
$objInst->fun1(); 

但我不认为这将如何作出任何意义在任何情况下。

+0

谢谢!工作正常。但是我们是否应该在同一个类中实例化同一个类的对象还有什么规则? – rahulsm

相关问题