2011-06-11 3 views
8

무엇을 호출의 앞하여 &PHP에서 "::"표기법은 무엇입니까?

$mainframe =& JFactory::getApplication('site'); 
$sql="SELECT rt.member_id ,rt.commission,rt.sales,kt.store_id,kt.user_id FROM jos_report 
rt JOIN jos_kingdom_tickets kt WHERE rt.member_id=kt.ticket_id"; 
$db =& JFactory::getDBO(); 

덕분에 사전에도 ... 나는 약간의 PHP 코드를 찾고 있어요 그리고 난 내가 무슨 뜻인지 아무 생각이 "::"표기를 참조

답변

22

::, the scope resolution operator은 정적 멤버 및 클래스의 상수를 참조하는 데 사용됩니다. 또한 수퍼 클래스의 생성자를 참조하는 데 사용됩니다.

<?php 
class A { 
    const BAR = 1; 
    public static $foo = 2; 
    private $silly; 

    public function __construct() { 
     $this->silly = self::BAR; 
    } 
} 

class B extends A { 
    public function __construct() { 
     parent::__construct(); 
    } 

    public static function getStuff() { 
     return 'this is tiring stuff.'; 
    } 
} 

echo A::BAR; 
echo A::$foo; 
echo B::getStuff(); 
?> 

작은 퀴즈는 : 범위 결정 연산자는 "paamayim nekudotayim"라고하며, "두 개의 점 회"히브리어 수단 여기 범위 결정 연산자의 여러 가지 용도를 설명하는 코드이다.

&은 PHP 5 이상을 사용하는 경우 유용하지 않으며 제거해야합니다. PHP 4에서는 반환 된 객체의 복사본이 사용되지 않았 음을 확인하는 데 필요했습니다. php 5에서 객체 복사는 clone이 호출되지 않으면 생성되지 않습니다. 따라서 &은 필요하지 않습니다. 여전히 &이 PHP 5에서 여전히 유용한 경우가 있습니다. 배열 요소를 반복하고 값을 수정할 때 & 연산자를 사용하여 배열 요소에 영향을 주어야합니다.

0

범위 연산자 또는 클래스에서 정적 메서드를 참조하는 데 사용됩니다. 따라서 :

class C { 
    const D = 2; 
} 

echo C::D; // 2 

귀하의 경우, 특정 인스턴스에 묶이지 않은 클래스의 메소드를 호출합니다.

2

::은 PHP, C++에서는 범위 연산자이지만 자바에서는 범위 연산자가 아닙니다. 이 경우 클래스의 정적 메서드를 호출하는 데 사용됩니다. 정적 메서드는 인스턴스가없는 경우에도 클래스 외부에서 호출 할 수있는 메서드입니다.

&은 함수가 반환하는 복사본을 만드는 대신 반환 된 개체에 대한 참조를 사용함을 나타냅니다. 이 경우 애플리케이션에서 사용되는 싱글 톤 객체를 반환하는 것처럼 보입니다. 데이터베이스와 인터페이스 (두 번째 경우)

+0

나는 이것이 C++에도 적용된다고 생각한다. – Blender

+0

네, 그게 내 대답은 :) – Cronco

+0

: ** 아니다 ** ** 자바에서 범위 분석 연산자입니다. – Asaph

1

인스턴스화 할 필요없이 클래스의 정적 메소드를 참조 할 때 사용할 수 있습니다. 예를 들어

:

여기
class myClass { 

    public static function staticFunction(){ 
     //... 
    } 

    public function otherFunction(){ 
     //... 
    } 

} 

당신은 클래스의 myClass::staticFunction() 외부를 사용할 수 있지만 당신은 같은 방법으로 otherFunction()을 사용하기 전에 새로운 myClass가 객체를 생성해야합니다.

관련 문제