2010-02-18 3 views
44

이 방법을 사용하면 $ this를 사용할 수 있지만 얻을 수있는 것은 다음과 같습니다. 치명적인 오류 : 개체 컨텍스트가 아닌 경우 $ this를 사용합니다.정적 함수 내부에서이 함수를 사용하면 실패합니다.

어떻게 작동합니까? 정적 함수는 모든 인스턴스 개체의 독립적이기 때문에

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

답변

79

이 올바른 방법

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

에게 정적 메서드에 대한 사용 self:: 대신 $this->입니다.

참조 : 자세한 정보 : 대한 PHP Static Methods Tutorial

+0

사실, 나는이 대답을 올리려고하고 있었다. –

+7

getsomthin() 메서드도 정적이어야 함을 기억해야합니다. 정적 메서드 내에서 비 ​​정적 메서드를 호출 할 수는 없습니다. – thorinkor

+7

@Sarfraz,'self ::'대신'static ::'이되어서는 안될까요? – Pacerier

8

당신은 정적 함수 내에서 $this을 사용할 수 없습니다. 함수를 정적으로 만들지 마십시오.

편집 : 정의에 는 정적 메서드는 인스턴스 객체없이 호출 할 수 있으며, 따라서 정적 메소드 내부 $this의 의미있는 사용은 없다.

+0

이 있어야 할 때 정적을 할당하려고 변수를 인스턴스 변수로 변경하십시오. 이게 가능하지 않니? – Jom

2

접근 자 this은 클래스의 현재 인스턴스를 참조합니다. 정적 메서드는 인스턴스에서 실행되지 않으므로 this을 사용하면 금지됩니다. 그래서 여기에서 직접 메서드를 호출해야합니다. 정적 메서드는 인스턴스의 범위에있는 아무 것도 액세스 할 수 없지만 인스턴스 범위 밖에있는 클래스 범위의 모든 항목에 액세스합니다.

1
정적 함수 자체를 사용하여 정적 기능 :: 내에서 호출 할 수

클래스는 다음 인스턴스를 선언 할 수 있습니다 사용하려는 비 정적 기능을 포함하는 경우 같은 클래스의

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

PHP는 설명이 부족합니다. 정적 함수 안에서 $ this->를 사용할 수는 없지만 같은 클래스 안에서 함수를 호출해야한다면 self ::를 사용하십시오

1

다음은 클래스의 메소드가 호출 될 때 일어나는 일례입니다 잘못된 길. 이 코드를 실행할 때 몇 가지 경고가 표시되지만 제대로 작동하고 "I 'm A : printing B property"가 인쇄됩니다.

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(); 

이 정적 메소드 호출되는 방법에 사용되는 변수 $이, 상기 "호출자"클래스의 인스턴스를 가리키는 솔기 (php5.6 실행). 예에서 위의 B.

편집의 특성을 가리키는 클래스에 사용되는 $ this-> 특성이있다 :

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object). PHP > The Basics

관련 문제