当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从同一类的静态方法调用非静态方法?》经验,为你挑选了1个好方法。

我正在研究PHP代码.

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

class Foo {

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

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

注意 :

这两个功能都在整个站点中使用,这是未知的.我无法对它们的静态/非静态性质进行任何更改.

Matei Mihai.. 73

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

class Foo {

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

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

echo Foo::fun2();

结果将是 non-static

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

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



1> Matei Mihai..:

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

class Foo {

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

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

echo Foo::fun2();

结果将是 non-static

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

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


如何传递构造函数使用的变量?
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有