ProgramingTip

정적 함수 내에서 사용하면 실패합니다.

bestdevel 2020. 11. 20. 09:18
반응형

정적 함수 내에서 사용하면 실패합니다.


$ this를 사용하고 싶은이 방법을 얻을 수 있습니다. 치명적 오류 : SQL 개체가 아닐 때 $ this 사용.

이 작업을 수행해야합니까?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}

이것이 올바른 방법입니다.

public static function userNameAvailibility()
{
     $result = self::getsomthin();
}

self::대신 정적 메서드$this->사용하십시오 .

참조 : 자세한 정보는 PHP 정적 메서드 튜토리얼 :)


$this정적 함수는 인스턴스화 된 개체와 독립이기 때문에 정적 함수 내에서 사용할 수 없습니다 . 함수를 정적으로 만들지 발.

편집 : 정의에 따라 인스턴스화 된 개체없이 정적 메서드를 호출 할 수 있기 $this때문에 정적 메서드 내부에서 의미있는 없습니다 .


접근 this자는 클래스의 현재 인스턴스를 참조합니다. 정적 메소드는 인스턴스에서 실행되지 않습니다 this. 따라서 여기에서 직접 메서드를 호출해야합니다. 정적 메소드는 인스턴스 범위의 모든 항목에 액세스 할 수 없지만 인스턴스 범위 외부의 클래스 범위에있는 모든 인스턴스 범위에 액세스합니다.


self ::를 사용하여 정적 함수 내에서 정적 함수 만 호출 할 수 있습니다. 클래스에 사용하려는 비 정적 함수가 선언되어 있고 클래스의 인스턴스를 사용할 수 있습니다.

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>

다음은 클래스의 메서드가 잘못된 방식으로 호출 될 때 발생하는 일입니다. 이 코드를 실행하면 몇 가지 경고가 표시 작동하고 다음과 같이 인쇄됩니다. "나는 A : B 속성 인쇄". (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 변수가 "호출자"클래스의 인스턴스를 가리킴을 확인합니다. 위의 예에는 B의 속성을 가리키는 A 클래스에 사용 된 $ this-> property가 있습니다.

편집하다:

의사 변수 $ this는 객체 컨텍스트 내에서 메서드가 호출 될 때 사용할 수 있습니다. $ this는 호출 객체에 대한 참조입니다 ( 보통 메서드가 속한 객체이지만 메서드가 보조 객체의 컨텍스트에서 정적으로 호출되는 경우 다른 객체 일 수 있음 ). PHP> 기초


PHP가 충분한 설명 오류를 표시하지 않는 것은 유감입니다. $ this->는 정적 함수 내에서 사용할 수 없습니다. 동일한 클래스 내에서 함수를 호출해야하는 경우 self ::를 사용하세요.

참고 URL : https://stackoverflow.com/questions/2286696/using-this-inside-a-static-function-fails

반응형