php - 如何从同一个类的静态方法调用非静态方法?

标签 php oop

我正在研究 PHP代码。

这是解释我的问题的示例代码:

class Foo {

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

如何从静态方法调用非静态方法?

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.

最佳答案

您必须在静态方法中创建一个新对象才能访问该类中的非静态方法:

class Foo {

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

    public static function fun2()
    {
        return (new self)->fun1();
    }
}

echo Foo::fun2();

结果将是非静态

稍后编辑:鉴于对将变量传递给构造函数的兴趣,我将发布该类的更新版本:

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');

结果将是 foo - bar

关于php - 如何从同一个类的静态方法调用非静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631623/

相关文章:

php - 如何在 PHP 中解析日期字符串?

javascript - 从表中删除行时如何更改计算

objective-c - 实例化一个对象的类型取决于另一个对象的类型

c++ - 游戏设计与程序语言和 OOP 语言的差异

在mysql中插入文件字节码时出现php错误

java - 在 Fragments 中使用 JSON 时,应用程序在 Android 开发中没有响应

php - 以编程方式自动填写和提交表单

java - 具有多个Windows设计的MVC

c++ - 从文件中,我如何从 C++ 中的某个点读取

java - 在数据库中保留java实体