Tôi đã gặp phải sự cố này khi cố gắng mở rộng một lớp hiện có từ GitHub. Tôi sẽ cố gắng giải thích bản thân mình, đầu tiên là viết về lớp học như tôi nghĩ, và sau đó là lớp học như bây giờ.
Những gì tôi mặc dù
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Cuối cùng tôi đã làm được gì
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Vì vậy, có vẻ như lỗi này cũng xuất hiện khi bạn đang sử dụng một phương thức trả về một lớp có không gian tên và bạn cố gắng trả về cùng một lớp nhưng với không gian tên khác. May mắn thay, tôi đã tìm thấy giải pháp này, nhưng tôi không hiểu đầy đủ lợi ích của tính năng này trong php 7.2, đối với tôi, việc viết lại các phương thức lớp hiện có là điều bình thường khi bạn cần, bao gồm việc xác định lại các tham số đầu vào và / hoặc thậm chí hành vi của phương pháp.
Một nhược điểm của aproach trước đó là IDE không thể nhận ra các phương thức mới được triển khai trong \ mycompany \ CutreApi \ ClassOfVendor (). Vì vậy, bây giờ, tôi sẽ đi với triển khai này.
Hiện đã xong
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Vì vậy, thay vì cố gắng sử dụng phương pháp "bất cứ điều gì", tôi đã viết một phương thức mới có tên "getW Anything". Trên thực tế, cả hai đều làm như nhau, chỉ trả về một lớp, nhưng với các không gian tên khác nhau như tôi đã mô tả trước đây.
Hy vọng điều này có thể giúp một ai đó.
function customMethod( ... )
:) cho mỗi chức năng, chúng tôi có thể cho bạn biết vấn đề cụ thể