PHPUnit परीक्षणों, स्तर 9 पर PHPStan स्थैतिक विश्लेषण और PSR मानकों के साथ अपने कोड को एक पेशेवर की तरह सुसज्जित करें।
इस पाठ को Kodokon में खोलेंविशेषज्ञ स्तर के कोड की पहचान उसकी चतुर तरकीबों से कम और उसके सुरक्षा जाल से अधिक होती है। तीन पूरक स्तंभ: परीक्षण (PHPUnit) जो कोड को चलाकर व्यवहार की पुष्टि करते हैं, स्थैतिक विश्लेषण (PHPStan) जो कुछ भी चलाए बिना गुणों को सिद्ध करता है, और साझा मानक (PSR) जो पारिस्थितिकी तंत्र को अंतरसंचालनीय बनाते हैं। सब कुछ Composer के साथ, विकास निर्भरताओं के रूप में स्थापित होता है।
composer require --dev phpunit/phpunit
composer require --dev phpstan/phpstan
./vendor/bin/phpunit --testdox tests
./vendor/bin/phpstan analyse src --level=9PHPUnit 10 से, मेटाडेटा PHP एट्रिब्यूट के रूप में लिखा जाता है: #[DataProvider] docblock @dataProvider एनोटेशन की जगह लेता है। एक डेटा प्रोवाइडर को पब्लिक और स्टैटिक होना चाहिए, क्योंकि PHPUnit इसे टेस्ट क्लास को इंस्टैंशिएट करने से पहले ही पढ़ लेता है। हर डेटा सेट एक वर्णनात्मक कुंजी धारण करता है, जो केस के विफल होने पर ज्यों-का-त्यों प्रदर्शित होती है - एक accents विफलता तुरंत पता चल जाती है।
<?php
declare(strict_types=1);
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
final class SlugifierTest extends TestCase
{
#[DataProvider('provideTitles')]
public function testSlugify(
string $input,
string $expected
): void {
$this->assertSame($expected, slugify($input));
}
public static function provideTitles(): array
{
return [
'simple' => [
'Hello World', 'hello-world'
],
'accents' => [
'Déjà vu', 'deja-vu'
],
];
}
}PHPStan अपनी कठोरता को स्तरों में श्रेणीबद्ध करता है, 0 से 9 तक (हाल के संस्करणों में स्तर 10 मौजूद है): स्तर 9 पर, कोई भी mixed वैल्यू तब तक अनुपयोगी हो जाती है जब तक उसे पहले स्पष्ट जाँचों द्वारा संकुचित न किया जाए। इसकी असली शक्ति उन docblock टाइप से आती है जिन्हें PHP इंजन नज़रअंदाज़ करता है लेकिन विश्लेषक सत्यापित करता है: ऐरे आकृतियाँ array{email: string}, सूचियाँ list<int>, जेनेरिक। वे एक साथ प्रलेखित करते हैं और सिद्ध भी करते हैं।
<?php
declare(strict_types=1);
function findEmail(?array $user): string
{
return $user['email'];
}
/**
* @param array{email: string}|null $user
*/
function findEmailSafe(?array $user): string
{
return $user === null
? 'n/a'
: $user['email'];
}PSR (PHP Standards Recommendations) PHP-FIG की परंपराएँ हैं। PSR-1 और PSR-12 शैली को मानकीकृत करते हैं: इंडेंटेशन, ब्रेसेस, इंपोर्ट क्रम - जिन्हें php-cs-fixer या phpcs द्वारा स्वतः लागू किया जाता है। PSR-4 ऑटोलोडिंग को परिभाषित करता है: एक नेमस्पेस उपसर्ग एक निर्देशिका से मैप होता है, जिससे Composer बिना किसी मैनुअल require के किसी भी क्लास का पता लगा सकता है। अंत में, इंटरफ़ेस PSR - लॉगर के लिए PSR-3, HTTP संदेशों के लिए PSR-7 - आपको एक लाइब्रेरी को दूसरी से बदलने देते हैं, बिना उस कोड को छुए जो इसका उपभोग करता है।