2012-03-22 31 views
11

Tôi không thể hiểu tại sao PhpStorm mang lại cho tôi những cảnh báo sau đây PHPDoc comment does not match function or method signature qua phương pháp này:Tại sao tôi lại nhận được một cảnh báo PHPDoc trong PhpStorm qua mã này

/** 
* Create a new instance of the class 
* @param string $classname Class to instantiate 
* @return object the instance 
* @throw FactoryException If the class is not instantiable 
*/ 
private function newInstance($classname) { 
    $reflectionClass = new \ReflectionClass($classname); 
    if (! $reflectionClass->isInstantiable()) { 
     throw new FactoryException("The class $classname is not instantiable."); 
    } 
    return new $classname; 
} 

Cảnh báo không phải là rất cụ thể, tôi đã đã thử nhiều thứ như thay đổi kiểu trả về thành "Object", "mixed" hoặc thậm chí "int" (để thử) nhưng nó không thay đổi. Vấn đề ở đây là gì ?

Trả lời

7

Nó phải là @throws không @throw.

Nếu bạn chỉ cần nhập /** qua dòng của khai báo hàm hoặc lớp, nó sẽ tự động chèn một cơ sở PHPDoc cho bạn. Đó là cách tôi nhận thấy sự khác biệt.

enter image description here

+1

Tôi đã thử '@ throws' nhưng cảnh báo vẫn còn đó (tôi đã làm tương tự như bạn đã làm với gõ'/** 'nhưng ngay cả các tự động tạo ra docblock đã cảnh báo). Trên thực tế tôi có một phiên bản beta của PhpStorm 4.0, có lẽ nó chỉ là một lỗi? –

+0

Funky, vâng tôi cũng đang sử dụng 4.0. – MetalFrog

+1

@Matthieu 1) Nó chắc chắn nên được ** ném ** 2) Có vài vấn đề với hiện tại v4 EAP xây dựng (116.101) trong lĩnh vực này (tôi đang có cùng). Từ những gì tôi nhìn thấy (dựa trên ý kiến ​​của bạn) chức năng này là trong lớp mở rộng lớp khác hoặc thực hiện giao diện và chức năng này ghi đè một trong lớp cha/giao diện. Nếu vậy - hãy so sánh các khối PHPDoc cho chúng - ngay cả khi 1 ký tự khác (ví dụ: "Tạo một phiên bản mới ..." so với "Tạo phiên bản mới ...") PhpStorm sẽ báo cáo lỗi đó. – LazyOne

1

Nếu phương pháp này sẽ xảy ra để thực hiện/override từ một lớp cha mẹ, nơi một docblock tồn tại cho nó, xem thẻ của bạn phù hợp với cả hai. Thông thường, các thẻ trong cha mẹ sẽ được thừa kế bởi đứa trẻ, như vậy nếu các phương thức docblock của cha mẹ đã có các thẻ giống nhau (param, return, throws), thì không cần thiết phải liệt kê chúng trong docblock của trẻ, trừ khi chúng cần để nói điều gì đó khác với cha mẹ.

+1

Đó có thể là, nhưng đó là phương pháp riêng tư;), không ghi đè ở đây –

1

Vui lòng tham khảo liên kết này https://blog.jetbrains.com/webide/2011/05/phpdoc-inspections/ Nó được đề cập ở đó mà "Việc kiểm tra báo cáo một vấn đề nếu một số tham số được mô tả trong comment PHPDoc và/hoặc các loại của họ không phù hợp với một hàm hay phương pháp kê khai tương ứng"

Các vấn đề liên quan