PHPSTAN มุ่งเน้นไปที่การค้นหาข้อบกพร่องในรหัสของคุณ แต่ใน PHP มีระยะเวลามากมายในการเขียนสิ่งของ พื้นที่เก็บข้อมูลนี้มีกฎเพิ่มเติมที่หมุนรอบรหัสที่พิมพ์อย่างเคร่งครัดและรุนแรงโดยไม่มีการคัดเลือกนักแสดงที่หลวมสำหรับผู้ที่ต้องการความปลอดภัยเพิ่มเติมในการเขียนโปรแกรมป้องกันอย่างมาก:
if , elseif , ผู้ประกอบการที่สองหลังจาก ! และทั้งสองด้านของ && และ || -+ และตัวถูกดำเนินการตัวเลขใน - / * / / / ** / %$var++ , $var-- , ++$var และ --$var$strict เพื่อความปลอดภัยประเภทที่ดีกว่าจะต้องตั้งค่าเป็น true :in_array (พารามิเตอร์ที่ 3)array_search (พารามิเตอร์ที่ 3)array_keys (พารามิเตอร์ที่ 3; เฉพาะในกรณีที่มีการจัดเตรียมพารามิเตอร์ 2nd $search_value )base64_decode (พารามิเตอร์ที่ 2)while ที่เงื่อนไขลูปและ for การกำหนดเริ่มต้นแบบลูปไม่สามารถใช้หลังจากลูปswitch และค่า case จะต้องตรงกัน PHP เปรียบเทียบพวกเขาอย่างหลวม ๆ โดยค่าเริ่มต้นและอาจนำไปสู่ผลลัพธ์ที่ไม่คาดคิดempty() - เป็นการเปรียบเทียบที่หลวมมาก (ดูคู่มือ) ขอแนะนำให้ใช้การที่เข้มงวดมากขึ้น?: :) - หมายถึงการเปรียบเทียบที่อ่อนแอขอแนะนำให้ใช้ Null Coalesce Operator ( ?? ) หรือผู้ประกอบการที่มีเงื่อนไขที่เข้มงวด$$foo , $this->$method() ฯลฯ )instanceof แท้จริงของการตรวจสอบประเภท is_* และการเปรียบเทียบที่เข้มงวด === / !== การตรวจสอบเหล่านี้สามารถปิดได้โดยการตั้งค่า checkAlwaysTrueInstanceof / checkAlwaysTrueCheckTypeFunctionCall / checkAlwaysTrueStrictComparison เป็นเท็จ$ls = `ls -la` )$this โดยตรงแทนที่จะใช้ $this ทางอ้อมกฎเพิ่มเติมกำลังมาในรุ่นต่อ ๆ ไป!
ในการใช้ส่วนขยายนี้ต้องใช้ในนักแต่งเพลง:
composer require --dev phpstan/phpstan-strict-rules
หากคุณติดตั้ง PHPSTAN/EXTENSION-INSTALLER คุณก็พร้อมแล้ว!
หากคุณไม่ต้องการใช้ phpstan/extension-installer ให้รวมกฎ neon ในการกำหนดค่า phpstan ของโครงการของคุณ:
includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon
คุณสามารถปิดใช้งานกฎโดยใช้พารามิเตอร์การกำหนดค่า:
parameters :
strictRules :
disallowedLooseComparison : false
booleansInConditions : false
uselessCast : false
requireParentConstructorCall : false
disallowedBacktick : false
disallowedEmpty : false
disallowedImplicitArrayCreation : false
disallowedShortTernary : false
overwriteVariablesWithLoop : false
closureUsesThis : false
matchingInheritedMethodNames : false
numericOperandsInArithmeticOperators : false
strictFunctionCalls : false
dynamicCallOnStaticMethod : false
switchConditionsMatchingType : false
noVariableVariables : false
strictArrayFilter : false
illegalConstructorMethodCall : falseนอกเหนือจากการแนะนำกฎที่กำหนดเองใหม่แล้ว phpstan-strict-rules ยังเปลี่ยนค่าเริ่มต้นของพารามิเตอร์การกำหนดค่าบางอย่างที่มีอยู่ใน phpstan เอง พารามิเตอร์เหล่านี้มีการบันทึกไว้ใน phpstan.org
หากคุณไม่ต้องการเริ่มใช้กฎที่เข้มงวดทั้งหมดในครั้งเดียว แต่เพียงหนึ่งหรือสองคุณสามารถทำได้!
คุณสามารถปิดการใช้งานกฎทั้งหมดจาก rules.neon ที่รวมอยู่ด้วย:
parameters :
strictRules :
allRules : falseจากนั้นคุณสามารถเปิดใช้กฎแต่ละตัวด้วยพารามิเตอร์การกำหนดค่า:
parameters :
strictRules :
allRules : false
booleansInConditions : true แม้จะมี strictRules.allRules ตั้งค่าเป็น false แต่ส่วนหนึ่งของแพ็คเกจนี้ยังคงมีผล นั่นเป็นเพราะ phpstan-strict-rules ยังเปลี่ยนค่าเริ่มต้นของพารามิเตอร์การกำหนดค่าบางอย่างที่มีอยู่ใน phpstan เอง พารามิเตอร์เหล่านี้มีการบันทึกไว้ใน phpstan.org