source

같은 클래스의 정적 메서드에서 비정적 메서드를 호출하는 방법은 무엇입니까?

manysource 2023. 7. 29. 08:36

같은 클래스의 정적 메서드에서 비정적 메서드를 호출하는 방법은 무엇입니까?

저는 PHP 코드 작업을 하고 있습니다.

다음은 제 문제를 설명하는 샘플 코드입니다.

class Foo {

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

정적 메소드에서 비정적 메소드를 호출하려면 어떻게 해야 합니까?

참고: 두 기능 모두 사이트 전체에서 사용되며, 이는 알려지지 않았습니다.정적/비정적 특성을 변경할 수 없습니다.

해당 클래스 내의 정적 메서드가 아닌 메서드에 액세스하려면 정적 메서드 내부에 새 개체를 만들어야 합니다.

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

주요 차이점은 클래스의 개체를 인스턴스화하지 않고도 클래스에 대한 정적 메서드를 호출할 수 있다는 것입니다.그래서, 당신의 정적인 방법으로 시도해보세요.

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

하지만 저는 이것이 어떤 맥락에서 어떻게 말이 되는지 모르겠습니다.

언급URL : https://stackoverflow.com/questions/41631623/how-to-call-non-static-method-from-static-method-of-same-class