2017-01-13 2 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

Смежные вопросы