Sau một tái cấu trúc, chúng tôi đã có một cái gì đó như thế này trong một trong các lớp học của chúng tôi:Làm thế nào để phát hiện các lĩnh vực declarated động trên các đối tượng với codesniffer trong PHP
class FooBar
{
// $foo was $bla before
private $foo;
public function setBlubbOnArrayOnlyOnce($value)
{
// $this->bla was forgotten during refactoring. Must be $this->foo
if(!isset($this->bla['blubb'])) {
$this->foo['blubb'] = $value;
}
}
}
Vì vậy, vào cuối $ this-> foo [ 'blubb' ] luôn được thiết lập, không chỉ một lần. Điều này xảy ra do các phương pháp ma thuật của PHP. Chúng tôi không muốn nó có thể truy cập các lĩnh vực động, vì vậy tôi nghĩ rằng tôi chỉ cần thêm một quy tắc mã hóa. Nhưng tôi không tìm thấy và hỏi tôi tại sao.
PHPStorm hiển thị trường được khai báo tự động ở đó, nhưng tôi muốn điều này tự động bị lỗi với mã số (hoặc điều gì đó tương tự) trong chu kỳ triển khai của chúng tôi.
Có ai có ý tưởng về điều này không? Có quy tắc nào tốt không? Tôi có nên viết của riêng tôi và làm thế nào? Hoặc nó sẽ là thực hành xấu để vô hiệu hóa nó?
Tuyên bố từ chối trách nhiệm: Chúng tôi sử dụng các thử nghiệm, nhưng đôi khi bạn bỏ lỡ mọi thứ ... Sẽ tốt hơn nếu bạn ngăn điều này ngay từ đầu. Ngoài ra, xin đừng đến với việc ghi đè lên các phương pháp ma thuật. Tôi không muốn có một đặc điểm/trừu tượng bất cứ điều gì trong mỗi lớp.
Bạn có thể tìm kiếm các biến không xác định, vì $ this-> bla sẽ không được khai báo? Bạn có thể phải mở rộng mã trong PHPCodeSniffer. –
Tôi đang cố gắng, nhưng tôi đã hy vọng một cách rõ ràng và dễ dàng để làm điều đó – Kasihasi
Bạn đã yêu cầu trên Squizlabs (http://www.squizlabs.com/) hoặc GitHub của họ (https://github.com/squizlabs/PHP_CodeSniffer) như Greg Sherwood đã khá nhạy cảm với các câu hỏi trong quá khứ. –