정적 함수 내에서 $this를 사용하면 실패함
$this를 사용하고 싶은 방법이 있지만 얻을 수 있는 것은 치명적인 오류뿐입니다.오브젝트 컨텍스트가 아닌 경우 $this를 사용합니다.
어떻게 하면 작동시킬 수 있을까요?
public static function userNameAvailibility()
{
$result = $this->getsomthin();
}
이 길이 맞다
public static function userNameAvailibility()
{
$result = self::getsomthin();
}
사용하다self::
대신$this->
를 참조해 주세요.
자세한 내용은 PHP Static Methods 튜토리얼을 참조하십시오.
사용할 수 없습니다.$this
스태틱 함수는 인스턴스화된 객체와는 독립적이기 때문에 스태틱함수 내에 있습니다.기능을 정적이지 않게 해 주세요.
편집: 정의상 스태틱메서드는 인스턴스화된 오브젝트 없이 호출할 수 있기 때문에 의미 있는 사용은 없습니다.$this
정적 메서드 내.
self:를 사용하여 정적 함수 내에서 정적 함수만 호출할 수 있습니다. 클래스에 사용할 정적 함수가 아닌 경우 동일한 클래스의 인스턴스를 선언하고 사용할 수 있습니다.
<?php
class some_class{
function nonStatic() {
//..... Some code ....
}
Static function isStatic(){
$someClassObject = new some_class;
$someClassObject->nonStatic();
}
}
?>
악세사리this
는 클래스의 현재 인스턴스를 나타냅니다.정적 메서드는 인스턴스에서 실행되지 않으므로this
금지되어 있습니다.여기서 직접 메서드를 호출해야 합니다.스태틱 메서드는 인스턴스 범위 내의 어떤 것도 액세스할 수 없지만 인스턴스 범위 밖의 클래스 범위 내의 모든 항목에 액세스할 수 있습니다.
PHP가 충분히 설명적인 오류를 보이지 않는 것은 유감입니다.스태틱 함수에서는 $this->를 사용할 수 없습니다.같은 클래스 내에서 함수를 호출해야 할 경우 self::를 사용합니다.
다음은 클래스의 메서드가 잘못된 방식으로 호출될 때 발생하는 작업의 예입니다.이 코드를 실행하면 경고가 표시되지만 동작하며 "I'm A: printing B property"라고 인쇄됩니다.(php5.6에서 실행됨)
class A {
public function aMethod() {
echo "I'm A: ";
echo "printing " . $this->property;
}
}
class B {
public $property = "B property";
public function bMethod() {
A::aMethod();
}
}
$b = new B();
$b->bMethod();
스태틱 메서드로 호출되는 메서드에서 사용되는 변수 $this가 "caller" 클래스의 인스턴스를 가리킨다는 것을 나타냅니다.위의 예에서는 A 클래스에서 사용되는 $this-> 속성이 B의 속성을 가리키고 있습니다.
편집:
유사 변수 $이것은 오브젝트 컨텍스트 내에서 메서드가 호출될 때 사용할 수 있습니다.$이것은 호출 오브젝트(보통 메서드가 속한 오브젝트이지만 메서드가 세컨더리 오브젝트의 컨텍스트에서 스태틱하게 호출되는 경우에는 다른 오브젝트)에 대한 참조입니다.PHP > 기본
static 메서드에서 속성은 객체가 아닌 클래스용입니다.따라서 객체를 생성하지 않고도 정적 메서드 또는 기능에 액세스할 수 있습니다.$self는 클래스로 만들어진 객체를 가리키지만 $self는 같은 클래스만을 가리킵니다.
언급URL : https://stackoverflow.com/questions/2286696/using-this-inside-a-static-function-fails
'programing' 카테고리의 다른 글
JavaScript는 참조로 전달됩니까? (0) | 2022.10.22 |
---|---|
const를 사용하는 경우 JSHint에서 경고가 발생하는 이유는 무엇입니까? (0) | 2022.10.22 |
mariadb가 WSREP를 시작할 수 없음: std:: bad_alloc (0) | 2022.10.22 |
루트를 바꾸면 노래가 안 나와요.다이내믹 오디오 만드는 법 (0) | 2022.10.22 |
C에서 int64_t 타입을 인쇄하는 방법 (0) | 2022.10.22 |