How to call non-static method from static method of same class?
I am working on PHP code.
Here is the sample code to explain my problem:
class Foo {
public function fun1() {
echo 'non-static';
}
public static function fun2() {
echo "static" ;
//self::fun1();
//Foo::fun1();
}
}
How can I call the non-static method from the static method ?
Note: Both functions are used throughout the site, which is not known. I can't make any changes in the static/non-static nature of them.
Solution 1:
You must create a new object inside the static method to access non-static methods inside that class:
class Foo {
public function fun1()
{
return 'non-static';
}
public static function fun2()
{
return (new self)->fun1();
}
}
echo Foo::fun2();
The result would be non-static
Later edit: As seen an interest in passing variables to the constructor I will post an updated version of the class:
class Foo {
private $foo;
private $bar;
public function __construct($foo, $bar)
{
$this->foo = $foo;
$this->bar = $bar;
}
public function fun1()
{
return $this->foo . ' - ' . $this->bar;
}
public static function fun2($foo, $bar)
{
return (new self($foo, $bar))->fun1();
}
}
echo Foo::fun2('foo', 'bar');
The result would be foo - bar
Solution 2:
The main difference would be that you can call static methods for a class without having to instantiate an object of that class. So, in your static method try
Foo $objInst = new Foo();
$objInst->fun1();
But I don't see how this would make any sense in any context.