2013-05-31 1 views
1

저는 자바 세계에서 왔고 PHP에서 "쉬운"일을 시도했습니다.이클립스는 PHP 배열의 객체 유형을 해결하지 않습니다.

$data= new BugTimeData($a, $b, $c, $d); 
array_push($content, $data); 

내가,이 배열을 반복 오브젝트 액세스를 읽을 수 :

class BugTimeData { 

    private $bugid = ""; 
    private $startDate = ""; 
    private $resolvedDate = ""; 
    private $status = ""; 
    private $weekends = ""; 

    function __construct($bugid, $startDate, $resolvedDate, $status) { 
     $this->bugid = $bugid; 
     $this->startDate = $startDate; 
     $this->resolvedDate = $resolvedDate; 
     $this->status = $status; 
    } 

    function getBugId() { 
     return $this->bugid; 
    } 

    function getStartDate() { 
     return $this->startDate; 
    } 

    function getResolvedDate() { 
     return $this->resolvedDate;  
    } 

    function getStatus() { 
     return $this->status; 
    } 

    function getWeekendsBetween() { 
     return $this->weekends; 
    } 
} 

A는 배열에이 클래스에서 객체를 추가

가 나는 불변의 더미 데이터 개체가 그들의 방법 :

foreach($time_prio_bug_content as $key => $value) { 
    var_dump($value->getStatus()); 
} 

이것은 작동합니다! 하지만 내 IDE (Eclipse)는 $ 값이 유형 BugTimeData 인 것을 실제로 알지 못합니다. 따라서 공용 메서드에 쉽게 액세스 할 수 없습니다.

질문 : BugTimeData 유형의 개체에 $ 값을 캐스팅하는 방법은 무엇입니까?

자바에서는 (배열을 만들 때 객체의 유형을 정의 할 수 있으므로 캐스트가 필요하지 않기 때문에) 매우 간단합니다. 그래서 이것이 PHP에서 왜 가능하지 않은지 궁금합니다.

+0

'$ value'는 이미 객체입니다. – BlitZ

+0

@CORRUPT 물론 BugTimeData 유형은 아닙니다. – sk2212

+1

PHP는 네이티브로하려는 것을 지원하지 않습니다. IDE 인 PhpStorm을 사용하면 주석을 사용하여 변수의 유형 (클래스 또는 프리미티브)을 선언 할 수 있습니다. – leftclickben

답변

3

PHP가 아닌 IDE의 문제 일뿐입니다. 적절한 주석 유형 힌트를 추가하면 알맞은 IDE가 해당 주석 유형을 선택합니다. 예를 들어, 배열이 특정 유형의 객체를 포함하는 것을 정의 : 데이터를 함수 또는 메소드에서 오는

/** @var BugTimeData[] $array */ 
$array = array(); 

경우, 메소드의 서명에 적절한 @return 문서 태그를 추가합니다. 최악의 경우는, 루프 내부의 변수 표시 : 나는 믿고 주석에 대한 대안으로

foreach($time_prio_bug_content as $key => $value) { 
    /** @var BugTimeData $value */ 
    var_dump($value->getStatus()); 
} 
+0

... Eclipse로 작동하는 것 같습니다. 좋은! 나는 PHP가 동적으로 타입이 지정된 언어 일 때 객체, int, 바이너리 등으로의 캐스트가 가능한 이유를 정말로 이해하지 못합니다. 그러나 ... 문제가 해결되었습니다! – sk2212

+0

@ sk2 "동적 형식 지정"은 "형식 자유"를 의미하지 않습니다. PHP는 Java와 마찬가지로 유형이 지정되어 있지만 유형은 명시 적으로 모든 곳에서 선언 할 필요없이 문맥에 의해 유추됩니다 (물론'$ foo = 'bar''는 문자열이며 선언 할 필요가 없습니다). 필요에 따라 유형이 암시 적으로 변환됩니다. (물론'$ foo + $ bar'는 두 개의 정수를 사용하기 때문에 명시 적으로 변환 할 필요가 없습니다). 유일한 차이점은'String string = 'string'또는'string.toNumber()'를 이중으로 입력 할 필요가 없다는 것입니다. – deceze

-2

수 없습니다. PHP는 사실상 타입이 없기 때문에 코드를 읽을 때 어떤 변수가 어떤 타입인지 알 수있는 방법이 없습니다. 런타임 중에 만 가능합니다.

+1

... IDE가 주석을 통해 지원하는 경우를 제외하고 ... – leftclickben

-1

을 할 수 있습니다 type hint 같은 :

var $value = new BugTimeData; // this tells the IDE which type the variable will hold from here on 
foreach($time_prio_bug_content as $key => $value) { 
    var_dump($value->getStatus()); 
} 

또는 인수를 암시 유형 캐스트에 대한 클래스 메소드를 구현 반환 객체 (link 참조)

+0

형식 힌트는 반환 값이 아닌 인수 용입니다. PHP 6에 추가 될 수 있습니다 - https : //wiki.php의 RFC 형식입니다.net/rfc/returntypehint2 –

+0

@BobGregor 당신은 완전히 요점을 놓치고 있습니다. 내 코드 (및 링크)는 힌트 함수 반환 값을 입력하는 것을 의미하지 않습니다. 대신 변수'$ value'를 명시 적으로 선언하여 사용합니다. IDE가 다음 코드에 어떤 형식인지 이해하도록 도와줍니다. – zsawyer

+0

아! 이제 저는 여러분의 입장을 보았습니다 - $ value 요소가 IDE에 대한 임시 힌트임을 나타내려면 코드 샘플에 주석을 추가 할 수 있습니다. 나는 IDE로 과거에 해킹을 해왔다. –