같은 클래스의 정적 메서드에서 비정적 메서드를 호출하는 방법은 무엇입니까?
저는 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
'source' 카테고리의 다른 글
REST 웹 서비스와 RPC와 같은 서비스를 차별화하는 것은 무엇입니까? (0) | 2023.07.29 |
---|---|
리시버가 안드로이드에 등록되어 있는지 어떻게 확인합니까? (0) | 2023.07.29 |
이미지 데드 센터를 부트스트랩에 맞추는 방법 (0) | 2023.07.29 |
CSS에서 여러 특성 선택기 지정 (0) | 2023.07.29 |
CSS 콘텐츠로 Font Awesome 아이콘 사용 (0) | 2023.07.29 |