2012-12-19 6 views
2

새로운 PHP 프로젝트를 시작하고 몇 년 동안 PHP를 개발 한 후에 PHP 클래스를 실제로 사용해야한다고 생각합니다. 저는 C++ 세계의 클래스에 익숙하기 때문에이 지식을 PHP로 이식 할 때 확실하지 않은 몇 가지 사항이 있습니다.PHP : 클래스 내에서 클래스 함수 호출하기

C++에서는 PHP에서 접두사없이 모든 클래스 변수에 자동으로 액세스 할 수 있습니다.이 경우 모든 액세스 (변수 및 함수) 앞에 this->을 접두어로 사용해야합니다. 내가 무엇을 this (또는 적어도 내가 현재 클래스 인스턴스에 대한 포인터), 생각하지만, 그 필요하거나 선호하는지 여부 또는 어떤 대안이 있는지 모르겠습니다. 내 수업은 동일한 클래스 (즉, 그 자체) 내에서 다른 함수를 상당히 많이 사용하므로 매번 this->을 입력해야하므로 시간이 많이 걸리게됩니다.

클래스 자체는 싱글 톤일 가능성이 큽니다. 클래스를 실제로 사용할 지 또는 식별자 앞에 함수를 추가할지 모르겠습니다.

+0

일반적으로 싱글 톤은 해롭지 만 PHP에서는 실제로 전혀 이점이 없습니다. 나는 당신이 당신의 디자인을 재 작업 할 것을 제안한다. 이 질문은 귀하가 요청한 질문에 답변하지 않기 때문에 답변으로 게시되지 않습니다. 행운을 빕니다. –

+1

Levi가 위에서 언급했듯이 디자인에 약간의 재 작업이 필요할 것 같은데요. 클래스 중 어떤 클래스가 최상위 레벨이 될지 예를 들려 줄 수 있습니까? 클래스가 자기 참조를 많이한다는 것을 알고 있다면 어쩌면 다른 클래스로 나눌 수 있습니다. – James

+0

좋은 IDE를 얻으면 '$ this'를 타이핑하는 것에 대해 걱정할 필요가 없습니다. 사용할 수있는 속성을 기반으로 자동 완성 될 수 있으므로 실제로 시간을 절약 할 수 있습니다. – RobMasters

답변

2

"포인터"(->)! = C++ 포인터입니다.

$this은 현재 클래스와 인스턴스를 의미합니다. 모든 변수는 $this->variable; 또는 $this->function();을 사용하여 액세스합니다.

정적 변수 및 함수는 self::$variable 또는 클래스 인스턴스 외부

self::function()를 사용하여 액세스 할 수 있습니다, 당신은 클래스 인스턴스를 표시해야합니다 $foo->variable; 또는 $foo->function();

지금까지 내가 아는 한, 할 수있는 방법이 없습니다

또는 self::

함수의 객체를 사용하는 것과 관련하여 참조 할 때까지는 클래스 내 public/private/static/constant 변수에 액세스하십시오. 나중에 더 많은 기능을 추가하기 위해 코드를 확장 할 계획입니까? 모든 기능이 다소 관련이 있습니까? 그들이 싱글 톤 함수라면 클래스 대신 함수를 작성하는 데 아무런 해가 없습니다. 그것은 정말로 당신이 성취하고자하는 것에 달려 있습니다.

+0

'$ this'가없는 내부 클래스 항목에 접근하기 위해 항상'ReflectionClass'와 그 형제의'Reflection *'클래스를 사용할 수 있습니다. 이 용도로 권장하지는 않지만 할 수 있습니다. –

+0

아주 사실, 그것에 대해 생각하지 않았다. 그러나 7 문자 ('$ this->')의 OP 포인트는 반복적으로 타이핑하는 것이 너무 많아서 클래스 변수를 검색하기 위해 함수 호출을 사용하는 것이 너무 많을 수도 있음을 의미합니다. –

6

구성원에 액세스하려면 구성원이 속한 개체를 참조해야합니다.

모든 메서드 호출 또는 속성 액세스의 접두어는 $variable->입니다. $this은 현재 개체 인스턴스를 참조하는 마법 변수입니다. 그 사용은 선택 사항이 아닙니다.

이것은 PHP의 모든 기능이 메소드가 아니기 때문에 (다른 이유로도 그렇습니다) 전역 함수가 있기 때문입니다. 함수를 오브젝트와 연관시키지 않고 함수를 참조하면 전역 함수로 간주됩니다.

PHP에서 싱글 톤을 사용하지 않는 것이 좋습니다. 동시에 실행되는 각 스크립트가 자체 메모리 공간으로 가두어지기 때문에 성능/메모리 사용량을 찾을 수 없습니다.

0

예, 클래스 메소드 또는 변수에 액세스 할 때는 $this을 사용해야합니다.

<? 
class A { 
    public $a = 'Hello World!'; 
    function hello() { 
    $a = 'hello'; 
    echo $a; 
    } 
} 

$object = new A(); 
echo $object->hello(); 

$a 지역 범위가 될 것이며, $this->a 클래스의 변수가 될 것입니다 :

당신은 PHP는 변수가 선언하는 것이 필요하므로 이미지 다음과 같은 상황이되지 않음을 기억해야합니다.

관련 문제