หลังจากการปรับโครงสร้างใหม่ เรามีสิ่งนี้ในคลาสหนึ่งของเรา:
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;
}
}
}
ดังนั้นในท้ายที่สุด $this->foo['blubb'] จะถูกตั้งค่าไว้เสมอ ไม่ใช่เพียงครั้งเดียว สิ่งนี้เกิดขึ้นเนื่องจากวิธีการมหัศจรรย์ของ PHP เราไม่ต้องการให้สามารถเข้าถึงฟิลด์แบบไดนามิกได้ ดังนั้นฉันคิดว่าฉันแค่เพิ่มกฎ codesniffer แต่ฉันไม่พบเลยจึงถามฉันว่าทำไม
PHPStorm แสดงฟิลด์ที่ประกาศแบบไดนามิกโดยแจ้งให้ทราบที่นั่น แต่ฉันต้องการให้สิ่งนี้ล้มเหลวโดยอัตโนมัติด้วย codesniffer (หรือบางอย่างที่คล้ายกัน) ในระหว่างรอบการปรับใช้ของเรา
มีใครมีความคิดเกี่ยวกับเรื่องนี้หรือไม่? มีกฎเกณฑ์ที่ดีหรือไม่? ฉันควรเขียนของตัวเองหรือไม่ และอย่างไร? หรือมันจะเป็นแนวทางปฏิบัติที่ไม่ดีที่จะปิดการใช้งานมัน?
ข้อจำกัดความรับผิดชอบ: เราใช้การทดสอบ แต่บางครั้งคุณก็พลาดสิ่งต่าง ๆ... การป้องกันสิ่งนี้ตั้งแต่แรกจะเป็นการดี นอกจากนี้ โปรดอย่าคิดเขียนทับวิธีการวิเศษเลย ฉันไม่ต้องการที่จะมีลักษณะ/นามธรรมอะไรก็ตามในทุกชั้นเรียน
$this->bla
อาจถูกนิยามไว้ในคลาสพาเรนต์ Codesniffer ทำงานในระดับไฟล์/โทเค็น และหากคุณปฏิบัติตามมาตรฐานการเข้ารหัส PSR ก็จะไม่ทราบโครงสร้างคลาสพาเรนต์ (เนื่องจากอยู่ในไฟล์แยกต่างหาก) - person weirdan   schedule 08.01.2016