2014-11-10 2 views
0

첫째 주 : 여기이 권리는 코딩 문제가 아닙니다, 내가 가지고 내 프로젝트에서 모델 클래스가 나는 IDE PhpStormPHPStorm하는 PHPDoc "인스턴스에 클래스 멤버 액세스는"

와 함께이 문제가 기본적으로 데이터베이스에서 무언가를로드하는 방법 load. 그런 다음 모델을 확장하는 여러 클래스 (다른 모델)를 가지고 있습니다. 인스턴스화가에 액세스 클래스 membes 5.4 추가 기능에서 내가 phpstorm에서 코드 인스펙터 몇 가지 문제를 가지고와 지금

User extends Model 
Book extends Model 

.

사용자 클래스에 "getUrl()"메서드가 있습니다. 내가 그렇게 부르면

$user = new User(); 
$user->load(1); 
$user->getUrl(); 

나는 어떤 경고도 내지 않는다. Phpstorm은 $ user가 User 객체이며 경고를 발생시키지 않는다는 것을 알고 있습니다. 나는이

$user = (new User())->load(1); 
$user->getUrl(); 

처럼 선언 할 때

그러나, 나는 경고 Method 'getUrl()' not found in class Model를 얻을. 모델에 getUrl 메서드를 추가하여이 문제를 쉽게 해결할 수 있지만 getUrl 메서드를 사용하는 3-4 개의 클래스 (15 개) 만 있습니다. $ user가 Model 객체가 아니라 User 객체임을 알려줄 수 있습니까?

는 난 그냥 코드 전에

/** @var 사용자 $ 사용자 */

을 추가 할 수 있다는 것을 알고 있지만, 나는이 모든를 다시 생성이 자동으로이 아니라 내가 가진 것을되고 싶어요 시각. PHPStorm이의는 모델 클래스의 객체라고 생각하지 때문에

그래서 기본적으로 문제는

사용자 클래스가 경고가 인스턴스화가 기능의 클래스 멤버 액세스 권한으로 해당 클래스를 던졌습니다 호출의 getURL 라는 메소드를 가지고있다 사용자

+1

표시 헤더 ::의 getURL()' – Justinas

+1

더 나은 - 당신은'로드()'방법 거기에 무엇을하는 PHPDoc. '@return $ this' 나'@return static'과 같은 것이 있으면 적절한 클래스 인스턴스가 생성 될 때 IDE가'User' 대신에'Model'으로 처리 할 수 ​​있습니다. 'User' 클래스에서'load()'에 PHPDoc을 추가하면 해결됩니다. – LazyOne

+0

반환 및로드 방법으로이 두 가지를 시도했습니다. '@return bool | $ this | 자기'. 그러나 아무도 일한 적이 없다. – Musterknabe

답변

0

이 문제는 load() 방법에 docblock을 추가하여 해결해야합니다.

문제가

, 즉 두 번째 예에서 $usernew User()의 결과지만, ->load() 호출의 결과가 아니다이며

그것은 보일 것 load 실제로 올바른 클래스의 객체를 반환 추론 할 수 PHPStorm처럼 보인다 이 같은 : 사용자`의

<?php 
class Model 
{ 
    /** 
    * @param int $id 
    * @return static 
    */ 
    public function load($id) 
    { 
     // … 
    } 
} 
+0

안녕하세요, 그렇습니다.하지만 문제는로드 메소드가 모델에 있다는 것입니다. 즉, 모든 수업을 거기에 추가 할 수 없거나 돌아 오는 길에 15 개의 선언이있을 것입니다. @return 사용자 | 도서 | 갤러리 등 메소드가 User 클래스에 있으면이 문제가 해결되지만 Model 클래스에 있습니다. – Musterknabe

+0

'@return static'이 트릭을 수행해야합니다. – JimiDini

+0

@Musterknabe 답변에 예제를 추가했습니다. 여전히 작동하지 않습니까? – JimiDini

관련 문제