2011-09-06 6 views
3

내가 아는 한 ::은 하위 클래스에서 정적 함수와 기본 클래스 함수를 호출하는 데 사용됩니다. 그리고 내가 아는 한 일반적으로 클래스 밖에서 사용하기 위해 클래스의 인스턴스를 만들어야합니다. 우리가 어떤 인스턴스를 생성 만 ::를 사용하지 않고 foo 함수를 호출하는 것이"::"비 정적 함수 호출에 대한

$instance = new a(); 
$instance->foo(); 

하지만 수 :

class a 
{ 
    public function foo() 
    { 
     // 
    } 
} 
이 클래스를 사용하는

. 예를 들어 다음 코드는 클래스에서 작성되어 잘 작동합니다.

a::foo(); 

왜 작동합니까? 그리고 어떻게?

+2

'스코프 분석 연산자'라고합니다 : http://us3.php.net/manual/en/language.oop5.paamayim-nekudotayim.php –

+0

* (관련) * [해당 기호는 PHP에서 무엇을 의미합니까?] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon

답변

2

::은 범위 분석 연산자입니다. PHP의 문서에서

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

:

<?php 
class MyClass { 
    const CONST_VALUE = 'A constant value'; 
} 

$classname = 'MyClass'; 
echo $classname::CONST_VALUE; // As of PHP 5.3.0 

echo MyClass::CONST_VALUE; 
?> 

그것은 -> 유사하지만, 특별한 의미를 가지고있다.

+0

범위 분석 연산자로 속성에 액세스하는 방법은 무엇입니까? – Novice

4

Class::method() 구문을 사용하여 비 정적 메서드를 호출하면 메서드가 호출되지만 $this에 액세스하려고 시도하면 오류가 발생합니다. 그것은 근본적으로 PHP4의 (아주 최소한의) 객체 지향 프로그래밍 구현에서 보류이며 PHP5에서 경고를 생성합니다. 이것은 OOP 관점에서의 올바른 동작이 아니므로 의존해서는 안됩니다.

관련 문제