이것에 대한 정보를 찾고 있지만 사용 된 문자로 인해 결과를 얻을 수 없습니다.OOP에서 ->와 ::의 차이점
다음과 같은 차이점은 무엇입니까?
$classname->function()
Classname::function()
두 번째 예제는 자동으로 개체를 인스턴스화합니까?
이것에 대한 정보를 찾고 있지만 사용 된 문자로 인해 결과를 얻을 수 없습니다.OOP에서 ->와 ::의 차이점
다음과 같은 차이점은 무엇입니까?
$classname->function()
Classname::function()
두 번째 예제는 자동으로 개체를 인스턴스화합니까?
비 정적 멤버 (메서드 또는 함수/속성 또는 변수)를 호출하는 데는 앞 (->
)이 사용되고 정적 멤버를 호출하는 데는 나중에 (::
)가 사용됩니다.
비 정적 :
class foo{
function bar(){ echo 'test'; }
}
$foo = new foo();
$foo->bar();
정적 :
PHP: Static and non Static functions and Objects
더 나은 일을 이해하려면 :
class foo{
static function bar(){ echo 'test'; }
}
foo::bar(); // no class initialization needed
더 많은 정보를 원하시면,이 질문을 참조 개념이 있다면 what static methods are을 확인하고 비 정적과 다른 점을 확인해야합니다.
그건 정말 깨끗한 것입니다. 나를 위해, 나는 그들이 정직한 다른 이름을 가지고 있었는지 몰랐다. 그래도 많은 감사합니다. –
@ShaneJones : 환영합니다. – Sarfraz
아니요, 두 번째 것은 정적 메서드를 호출합니다. Check here.
두 번째 예제는 개체를 자동으로 인스턴스화하지 않습니다. 따라서 호출의 두 번째 방법에서 함수에서 $ this를 사용하면 다음과 같은 오류가 발생합니다. PHP 치명적 오류 : 객체 컨텍스트가 아닌 경우 $ this를 사용합니다.
일반적으로 비 정적 메서드를 호출하는 데 -> 사용되며 정적 메서드를 호출하는 데 사용됩니다.
하지만 PHP에서는 그렇게 엄격하지 않습니다. 예를 들어 :
error_reporting(E_ALL);
class A {
public static function staticFunc() {
echo "static";
}
public function instanceFunc() {
echo "instance";
}
}
A::instanceFunc(); // echo "instance"
$a = new A();
$a->staticFunc(); // echo "static"
성공적으로 실행 위라는 두 가지 방법.
PHP는 항상 새로운 기능을 점진적으로 구현하여 호환성을 보장하기 때문에 세부적인 결과가 초래 될 수 있습니다. 하지만 E_STRICT하기 위해 error_reporting은 수준을 설정 한 경우,이 같은 E_STRICT 오류 발견 할 것이다 :
엄격한 기준 : 비 정적 방법 A : instanceFunc()
이들의 유일한 차이점은 정적으로 호출 할 수 없습니다를 두 가지 방법은 : ::를 사용하여 메소드를 호출 할 때 변수 $ this를 사용할 수 없습니다.
하지만 여전히이 두 가지 방법을 다른 객체 지향 언어처럼 엄격하게 사용하는 것이 좋습니다.
더 자세한 정보를 얻으려면 http://www.php-internal.com/book/?p=chapt05/05-02-class-member-variables-and-methods
이 내용은 수 백만 번까지 보상되었습니다. PHP 책은 어디에 있습니까? –
[참조 - PHP에서이 기호의 의미는 무엇입니까?] (http://stackoverflow.com/questions/3737139/reference-what-dis-symbol-mean-in-php) – hakre