{"id":608,"date":"2025-06-11T10:47:58","date_gmt":"2025-06-11T02:47:58","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/sjjg\/608.html"},"modified":"2025-06-11T10:47:58","modified_gmt":"2025-06-11T02:47:58","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8php%e4%b8%ad%e5%ae%9e%e7%8e%b0%e4%be%9d%e8%b5%96%e6%b3%a8%e5%85%a5","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/608.html","title":{"rendered":"\u5982\u4f55\u5728PHP\u4e2d\u5b9e\u73b0\u4f9d\u8d56\u6ce8\u5165"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;PHP&#20013;&#23454;&#29616;&#20381;&#36182;&#27880;&#20837;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#35774;&#35745;&#27169;&#24335;&#65292;&#23427;&#20801;&#35768;&#25105;&#20204;&#23558;&#23545;&#35937;&#30340;&#21019;&#24314;&#21644;&#20351;&#29992;&#20998;&#31163;&#65292;&#20174;&#32780;&#25552;&#39640;&#20195;&#30721;&#30340;&#21487;&#27979;&#35797;&#24615;&#21644;&#21487;&#32500;&#25252;&#24615;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;PHP&#20013;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#26469;&#21019;&#24314;&#19968;&#20010;&#31867;&#23454;&#20363;&#12290;<\/p>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;<code>Database<\/code>&#31867;&#65292;&#23427;&#38656;&#35201;&#36830;&#25509;&#21040;&#25968;&#25454;&#24211;&#65292;&#24182;&#19988;&#25105;&#20204;&#38656;&#35201;&#36825;&#20010;&#31867;&#26469;&#25191;&#34892;&#19968;&#20123;&#25805;&#20316;&#12290;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#26469;&#30830;&#20445;<code>Database<\/code>&#31867;&#34987;&#27491;&#30830;&#22320;&#21021;&#22987;&#21270;&#24182;&#20256;&#36882;&#32473;&#20854;&#20182;&#31867;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ &#23450;&#20041;&#19968;&#20010;Database&#31867;\nclass Database {\n    private $host;\n    private $username;\n    private $password;\n\n    public function __construct($host, $username, $password) {\n        $this-&gt;host = $host;\n        $this-&gt;username = $username;\n        $this-&gt;password = $password;\n    }\n\n    public function connect() {\n        \/\/ &#36830;&#25509;&#21040;&#25968;&#25454;&#24211;&#30340;&#36923;&#36753;\n        echo \"Connecting to {$this-&gt;host} as {$this-&gt;username}\";\n    }\n}\n\n\/\/ &#23450;&#20041;&#19968;&#20010;User&#31867;&#65292;&#23427;&#38656;&#35201;&#19968;&#20010;Database&#23545;&#35937;\nclass User {\n    private $database;\n\n    public function __construct(Database $database) {\n        $this-&gt;database = $database;\n    }\n\n    public function getUserData() {\n        \/\/ &#33719;&#21462;&#29992;&#25143;&#25968;&#25454;&#30340;&#36923;&#36753;\n        echo \"Fetching user data from the database\";\n        $this-&gt;database-&gt;connect();\n    }\n}\n\n\/\/ &#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#21019;&#24314;User&#31867;&#30340;&#23454;&#20363;\n$database = new Database('localhost', 'root', 'password');\n$user = new User($database);\n\n$user-&gt;getUserData();<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#23450;&#20041;&#20102;&#19968;&#20010;<code>Database<\/code>&#31867;&#65292;&#23427;&#26377;&#19977;&#20010;&#23646;&#24615;&#65306;<code>host<\/code>&#12289;<code>username<\/code>&#21644;<code>password<\/code>&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;<code>User<\/code>&#31867;&#65292;&#23427;&#26377;&#19968;&#20010;&#26500;&#36896;&#20989;&#25968;&#65292;&#35813;&#26500;&#36896;&#20989;&#25968;&#25509;&#21463;&#19968;&#20010;<code>Database<\/code>&#23545;&#35937;&#20316;&#20026;&#21442;&#25968;&#12290;&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#25105;&#20204;&#23558;<code>Database<\/code>&#23545;&#35937;&#20256;&#36882;&#32473;&#20102;<code>User<\/code>&#31867;&#65292;&#20174;&#32780;&#23454;&#29616;&#20102;&#20381;&#36182;&#27880;&#20837;&#12290;<\/p>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#25105;&#20204;&#21487;&#20197;&#26356;&#22909;&#22320;&#25511;&#21046;&#20381;&#36182;&#20851;&#31995;&#65292;&#20351;&#24471;&#20195;&#30721;&#26356;&#21152;&#27169;&#22359;&#21270;&#21644;&#26131;&#20110;&#27979;&#35797;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#20381;&#36182;&#27880;&#20837;&#65288;DI&#65289;&#24050;&#32463;&#25104;&#20026;&#29616;&#20195;&#36719;&#20214;&#24320;&#21457;&#20013;&#30340;&#19968;&#20010;&#24517;&#22791;&#24037;&#20855;&#65292;&#22240;&#20026;&#23427;&#22312;&#20419;&#36827;&#26494;&#32806;&#21512;&#12289;&#22686;&#24378;&#20195;&#30721;&#21487;&#32500;&#25252;&#24615;&#20197;&#21450;&#31616;&#21270;&#21333;&#20803;&#27979;&#35797;&#26041;&#38754;&#25198;&#28436;&#30528;&#37325;&#35201;&#35282;&#33394;&#12290;&#22312;PHP&#20013;&#65292;DI&#19982;&#20219;&#20309;&#20854;&#20182;&#32534;&#31243;&#29983;&#24577;&#31995;&#32479;&#19968;&#26679;&#37325;&#35201;&#65292;&#26412;&#25945;&#31243;&#26088;&#22312;&#24341;&#23548;&#24744;&#20102;&#35299;&#24182;&#23454;&#26045;&#20381;&#36182;&#27880;&#20837;&#21040;&#24744;&#30340;PHP&#24212;&#29992;&#20013;&#12290;<\/p><p>&#22312;&#28145;&#20837;&#23454;&#26045;&#20043;&#21069;&#65292;&#29702;&#35299;&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection&#65292;DI&#65289;&#33267;&#20851;&#37325;&#35201;&#12290;DI&#26159;&#19968;&#31181;&#35774;&#35745;&#27169;&#24335;&#65292;&#20801;&#35768;&#19968;&#20010;&#31867;&#20174;&#22806;&#37096;&#28304;&#25509;&#25910;&#20854;&#20381;&#36182;&#39033;&#65292;&#32780;&#19981;&#26159;&#20869;&#37096;&#21019;&#24314;&#23427;&#20204;&#12290;&#36825;&#20419;&#36827;&#20102;&#27169;&#22359;&#21270;&#26550;&#26500;&#65292;&#24182;&#20351;&#20195;&#30721;&#26356;&#26131;&#20110;&#27979;&#35797;&#21644;&#32500;&#25252;&#12290;PHP&#20316;&#20026;&#21160;&#24577;&#35821;&#35328;&#19988;&#20855;&#26377;&#38754;&#21521;&#23545;&#35937;&#30340;&#33021;&#21147;&#65292;&#25552;&#20379;&#20102;&#22810;&#31181;&#23454;&#29616;DI&#30340;&#26041;&#27861;&#65292;&#21253;&#25324;&#26500;&#36896;&#20989;&#25968;&#27880;&#20837;&#12289;setter&#27880;&#20837;&#20197;&#21450;&#22522;&#20110;&#25509;&#21475;&#30340;&#27880;&#20837;&#12290;&#25105;&#20204;&#23558;&#25506;&#32034;&#36825;&#20123;&#26041;&#27861;&#65292;&#24182;&#36890;&#36807;&#23454;&#38469;&#31034;&#20363;&#36827;&#34892;&#35814;&#32454;&#35762;&#35299;&#12290;<\/p><h2>&#29702;&#35299;&#20381;&#36182;&#27880;&#20837;&#30340;&#22522;&#30784;&#27010;&#24565;<\/h2><p>&#26368;&#22522;&#26412;&#30340;&#20381;&#36182;&#27880;&#20837;&#28041;&#21450;&#19977;&#20010;&#20851;&#38190;&#32452;&#20214;&#65306;<\/p><p>&#27880;&#20837;&#22120;&#65306;&#27880;&#20837;&#26381;&#21153;&#21040;&#23458;&#25143;&#31471;&#31867;&#30340;&#26426;&#21046;&#12290;&#23427;&#21487;&#20197;&#25163;&#21160;&#36827;&#34892;&#65292;&#20063;&#21487;&#20197;&#30001;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#25110;&#26381;&#21153;&#23450;&#20301;&#22120;&#31649;&#29702;&#12290;<\/p><p>&#26381;&#21153;&#65306;&#23458;&#25143;&#31471;&#31867;&#20351;&#29992;&#30340;&#20381;&#36182;&#39033;&#12290;<\/p><p>&#23458;&#25143;&#31471;&#31867;&#65306;&#20381;&#36182;&#27880;&#20837;&#30340;&#20381;&#36182;&#28304;&#12290;&#36825;&#26159;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#35813;&#31867;&#20013;&#30340;&#20301;&#32622;&#12290;<\/p><h2>&#20381;&#36182;&#27880;&#20837;&#30340;&#31867;&#22411;<\/h2><p>&#26377;&#19977;&#31181;&#20027;&#35201;&#30340;&#20381;&#36182;&#27880;&#20837;&#26041;&#27861;&#65306;<\/p><p>&#22522;&#20110;&#25509;&#21475;&#30340;&#27880;&#20837;&#65306;&#20381;&#36182;&#36890;&#36807;&#23454;&#29616;&#35813;&#25509;&#21475;&#30340;&#31867;&#26469;&#25552;&#20379;&#12290;<\/p><p>&#20381;&#36182;&#27880;&#20837;&#65306;&#20381;&#36182;&#36890;&#36807;setter&#26041;&#27861;&#25552;&#20379;&#12290;<\/p><p>&#26500;&#36896;&#20989;&#25968;&#27880;&#20837;&#65306;&#20381;&#36182;&#39033;&#36890;&#36807;&#31867;&#30340;&#26500;&#36896;&#20989;&#25968;&#25552;&#20379;&#12290;<\/p><h2>&#22312;PHP&#20013;&#23454;&#29616;&#26500;&#36896;&#20989;&#25968;&#27880;&#20837;&#65288;Constructor Injection&#65289;&#12290;<\/h2><p>&#26500;&#36896;&#22120;&#27880;&#20837;&#26159;&#26368;&#24120;&#35265;&#30340;DI&#65288;&#20381;&#36182;&#27880;&#20837;&#65289;&#24418;&#24335;&#12290;&#23427;&#28041;&#21450;&#23558;&#25152;&#38656;&#30340;&#20381;&#36182;&#39033;&#20256;&#36882;&#21040;&#31867;&#30340;&#26500;&#36896;&#20989;&#25968;&#20013;&#12290;<\/p><pre><code>&lt;?php\n\nclass Logger {\n    public function log($message) {\n        \/\/ Log the message to a file or other medium\n    }\n}\n\nclass Application {\n    protected $logger;\n    \n    public function __construct(Logger $logger) {\n        $this-&gt;logger = $logger;\n    }\n    \n    public function run() {\n        \/\/ Application logic\n        $this-&gt;logger-&gt;log('Application is running.');\n    }\n}\n\n$logger = new Logger();\n$app = new Application($logger);\n$app-&gt;run();\n?&gt;\n<\/code><\/pre><p>&#22312;&#19978;&#36848;&#20363;&#23376;&#20013;&#65292;<code>Application<\/code>&#31867;&#38656;&#35201;&#19968;&#20010;&#23454;&#20363;&#12290;<code>Logger<\/code>&#29992;&#20110;&#21151;&#33021;&#12290;&#25105;&#20204;&#27880;&#20837;&#20102;&#19968;&#20010;<code>Logger<\/code>&#23558;&#8230;&#23454;&#20363;&#21270;<code>Application<\/code>&#36890;&#36807;&#20854;&#26500;&#36896;&#20989;&#25968;&#12290;<\/p><h2>&#22312;PHP&#20013;&#23454;&#29616;Setter&#27880;&#20837;&#12290;<\/h2><p>&#35774;&#32622;&#27880;&#20837;&#65288;setter injection&#65289;&#28041;&#21450;&#36890;&#36807;&#19987;&#29992;&#30340;setter&#26041;&#27861;&#25552;&#20379;&#20381;&#36182;&#39033;&#12290;&#36825;&#31181;&#26041;&#27861;&#29305;&#21035;&#36866;&#29992;&#20110;&#24403;&#20381;&#36182;&#39033;&#21487;&#33021;&#26159;&#21487;&#36873;&#30340;&#65292;&#25110;&#32773;&#22312;&#23558;&#26469;&#21487;&#33021;&#38656;&#35201;&#26367;&#25442;&#20381;&#36182;&#39033;&#30340;&#24773;&#20917;&#19979;&#12290;<\/p><pre><code>&lt;?php\n\nclass DatabaseConnection {\n    \/\/ ...\n}\n\nclass UserRepository {\n    protected $dbConnection;\n    \n    public function setDatabaseConnection(DatabaseConnection $dbConnection) {\n        $this-&gt;dbConnection = $dbConnection;\n    }\n    \n    \/\/ Repository methods\n}\n\n$userRepo = new UserRepository();\n$userRepo-&gt;setDatabaseConnection(new DatabaseConnection());\n\n\/\/...\n?&gt;\n<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#24744;&#35201;&#34920;&#36798;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#24744;&#30340;&#38382;&#39064;&#25110;&#35831;&#27714;&#12290;<code>UserRepository<\/code>&#35813;&#31867;&#19981;&#38656;&#35201;&#19968;&#20010;&#12290;<code>DatabaseConnection<\/code>&#38656;&#35201;&#22312;&#23454;&#20363;&#21270;&#26102;&#25552;&#20379;&#20381;&#36182;&#39033;&#12290;&#30456;&#21453;&#65292;&#23427;&#26292;&#38706;&#20102;&#19968;&#20010;&#21487;&#20197;&#29992;&#26469;&#22312;Repository&#38656;&#35201;&#20351;&#29992;&#20043;&#21069;&#27880;&#20837;&#20381;&#36182;&#39033;&#30340;setter&#26041;&#27861;&#12290;<\/p><h2>&#22312;PHP&#20013;&#23454;&#29616;&#22522;&#20110;&#25509;&#21475;&#30340;&#27880;&#20837;&#65288;Interface-based Dependency Injection&#65289;&#12290;<\/h2><p>&#22522;&#20110;&#25509;&#21475;&#30340;&#27880;&#20837;&#28041;&#21450;&#23450;&#20041;&#19968;&#20010;&#21253;&#21547;&#20381;&#36182;&#35774;&#32622;&#26041;&#27861;&#22768;&#26126;&#30340;&#25509;&#21475;&#12290;&#20219;&#20309;&#38656;&#35201;&#27880;&#20837;&#20381;&#36182;&#30340;&#31867;&#24517;&#39035;&#23454;&#29616;&#35813;&#25509;&#21475;&#24182;&#25552;&#20379;&#20855;&#20307;&#30340;&#23454;&#29616;&#26041;&#27861;&#12290;<\/p><pre><code>&lt;?php\n\ninterface DatabaseConnectionInterface {\n    public function setDatabaseConnection(DatabaseConnection $dbConnection);\n}\n\nclass UserRepository implements DatabaseConnectionInterface {\n    protected $dbConnection;\n\n    public function setDatabaseConnection(DatabaseConnection $dbConnection) {\n        $this-&gt;dbConnection = $dbConnection;\n    }\n    \n    \/\/ Repository methods\n}\n\n\/\/...\n\n?&gt;\n<\/code><\/pre><p>&#19978;&#36848;&#20363;&#23376;&#35828;&#26126;&#20102;&#22914;&#20309;&#20351;&#29992;&#12290;<code>UserRepository<\/code>&#23454;&#29616;<code>DatabaseConnectionInterface<\/code>&#65292;&#30830;&#20445;&#23427;&#25552;&#20379;&#19968;&#20010;<code>setDatabaseConnection<\/code>DI&#26041;&#27861;&#30340;&#27493;&#39588;&#12290;<\/p><h2>&#22312;PHP&#20013;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#30340;&#27493;&#39588;&#22914;&#19979;&#65306;\n\n&#23433;&#35013;&#20381;&#36182;&#65306;&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;&#19968;&#20010;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#24211;&#65292;&#20363;&#22914;Symfony DI Container&#25110;&#32773;PSR-11&#35268;&#33539;&#25903;&#25345;&#30340;&#20854;&#20182;&#24211;&#12290;\n\n&#21019;&#24314;&#26381;&#21153;&#37197;&#32622;&#25991;&#20214;&#65306;&#21019;&#24314;&#19968;&#20010;&#25110;&#22810;&#20010;&#37197;&#32622;&#25991;&#20214;&#26469;&#23450;&#20041;&#24212;&#29992;&#31243;&#24207;&#30340;&#26381;&#21153;&#21644;&#23427;&#20204;&#20043;&#38388;&#30340;&#20851;&#31995;&#12290;&#36825;&#20123;&#37197;&#32622;&#25991;&#20214;&#36890;&#24120;&#20301;&#20110;config&#30446;&#24405;&#19979;&#12290;\n\n&#27880;&#20876;&#26381;&#21153;&#21040;&#23481;&#22120;&#65306;&#22312;&#26381;&#21153;&#37197;&#32622;&#25991;&#20214;&#20013;&#27880;&#20876;&#38656;&#35201;&#20351;&#29992;&#30340;&#26381;&#21153;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#26500;&#36896;&#20989;&#25968;&#12289;setter&#26041;&#27861;&#25110;&#32773;&#20854;&#20182;&#26041;&#24335;&#23454;&#29616;&#12290;\n\n&#20351;&#29992;&#26381;&#21153;&#65306;&#22312;&#38656;&#35201;&#30340;&#22320;&#26041;&#23454;&#20363;&#21270;&#24182;&#35843;&#29992;&#26381;&#21153;&#30340;&#26041;&#27861;&#12290;&#23481;&#22120;&#20250;&#33258;&#21160;&#25552;&#20379;&#25152;&#38656;&#30340;&#26381;&#21153;&#12290;\n\n&#20381;&#36182;&#26597;&#25214;&#65306;&#22914;&#26524;&#38656;&#35201;&#20174;&#19981;&#21516;&#30340;&#20301;&#32622;&#33719;&#21462;&#30456;&#21516;&#30340;&#20381;&#36182;&#39033;&#65292;&#21487;&#20197;&#20351;&#29992;&#23481;&#22120;&#30340;&#26597;&#25214;&#22120;&#21151;&#33021;&#12290;\n\n&#21333;&#20363;&#27169;&#24335;&#65306;&#23545;&#20110;&#37027;&#20123;&#22312;&#25972;&#20010;&#24212;&#29992;&#33539;&#22260;&#20869;&#37117;&#38656;&#20849;&#20139;&#30340;&#21333;&#20363;&#23545;&#35937;&#65292;&#21487;&#20197;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#36827;&#34892;&#27880;&#20876;&#12290;\n\n&#38169;&#35823;&#22788;&#29702;&#65306;&#36890;&#36807;&#24322;&#24120;&#22788;&#29702;&#22120;&#65288;&#22914;ExceptionListener&#65289;&#25429;&#33719;&#24182;&#22788;&#29702;&#23481;&#22120;&#20869;&#37096;&#30340;&#38169;&#35823;&#12290;\n\n&#27979;&#35797;&#65306;&#20026;&#27599;&#20010;&#26381;&#21153;&#32534;&#20889;&#21333;&#20803;&#27979;&#35797;&#20197;&#30830;&#20445;&#20854;&#27491;&#24120;&#24037;&#20316;&#12290;\n\n&#25193;&#23637;&#65306;&#22914;&#26524;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#25193;&#23637;&#20102;&#29616;&#26377;&#30340;&#39033;&#30446;&#65292;&#21487;&#33021;&#38656;&#35201;&#20462;&#25913;&#29616;&#26377;&#20195;&#30721;&#20197;&#36866;&#37197;&#26032;&#30340;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#12290;\n\n&#20197;&#19978;&#23601;&#26159;&#22312;PHP&#20013;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#30340;&#22522;&#26412;&#27969;&#31243;&#12290;&#24076;&#26395;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;<\/h2><p>&#26356;&#39640;&#32423;&#30340;&#20381;&#36182;&#27880;&#20837;&#23454;&#29616;&#28041;&#21450;&#20351;&#29992;DI&#23481;&#22120;&#65292;&#35813;&#23481;&#22120;&#36127;&#36131;&#33258;&#21160;&#23454;&#20363;&#21270;&#31867;&#24182;&#27880;&#20837;&#20381;&#36182;&#39033;&#12290;PHP&#26377;&#22810;&#20010;DI&#23481;&#22120;&#65307;&#27969;&#34892;&#30340;&#21253;&#25324;Pimple&#12289;PHP-DI&#21644;Symfony&#30340;&#20381;&#36182;&#27880;&#20837;&#32452;&#20214;&#12290;<\/p><p>&#22312;&#36825;&#37324;&#65292;&#25105;&#20204;&#36890;&#36807;&#20351;&#29992;Pimple&#20316;&#20026;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#26469;&#35828;&#26126;&#19968;&#20010;&#31616;&#21270;&#31034;&#20363;&#65306;<\/p><pre><code>&lt;?php\n\n\/\/ Include Pimple's autoloader\nrequire 'vendor\/autoload.php';\n\nuse PimpleContainer;\n\n$container = new Container();\n\n$container['logger'] = function() {\n    return new Logger();\n};\n\n$container['application'] = function ($c) {\n    return new Application($c['logger']);\n};\n\n$app = $container['application'];\n$app-&gt;run();\n\n?&gt;\n<\/code><\/pre><p>&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;Pimple &#23481;&#22120;&#30340;&#21311;&#21517;&#20989;&#25968;&#23450;&#20041;&#20102;&#22914;&#20309;&#23454;&#20363;&#21270;&#23545;&#35937;&#12290;<code>Logger<\/code>and<code>Application<\/code>&#35838;&#31243;&#12290;&#20160;&#20040;&#26102;&#20505;&#65311;<code>$container['application']<\/code>&#19968;&#26086;&#35775;&#38382;&#65292;Pimple &#20250;&#33258;&#21160;&#27880;&#20837;&#12290;<code>Logger<\/code>&#20381;&#36182;&#20851;&#31995;&#12290;<\/p><h2>&#26368;&#20339;&#23454;&#36341;&#65306;DI&#30340;&#26368;&#20339;&#23454;&#36341;<\/h2><p>&#20381;&#36182;&#27880;&#20837;&#30340;&#36866;&#24403;&#23454;&#29616;&#20276;&#38543;&#30528;&#19968;&#31995;&#21015;&#26368;&#20339;&#23454;&#36341;&#65306;<\/p><p>&#20351;&#29992;&#25509;&#21475;&#26469;&#23450;&#20041;&#20381;&#36182;&#39033;&#30340;&#25277;&#35937;&#32422;&#23450;&#12290;<\/p><p>&#32771;&#34385;&#21333;&#19968;&#32844;&#36131;&#21407;&#21017;&#65292;&#20197;&#36991;&#20813;&#22312;&#21333;&#20010;&#31867;&#20013;&#27880;&#20837;&#36807;&#22810;&#30340;&#20381;&#36182;&#39033;&#12290;<\/p><p>&#25512;&#33616;&#20351;&#29992;&#26500;&#36896;&#22120;&#27880;&#20837;&#26469;&#22788;&#29702;&#24517;&#38656;&#20381;&#36182;&#39033;&#65292;&#32780;&#20351;&#29992;setter&#27880;&#20837;&#26469;&#22788;&#29702;&#21487;&#36873;&#20381;&#36182;&#39033;&#12290;<\/p><p>&#20026;&#23458;&#25143;&#31471;&#31867;&#19982;&#20854;&#20381;&#36182;&#39033;&#20043;&#38388;&#24314;&#31435;&#28165;&#26224;&#30340;&#21512;&#21516;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#23454;&#29616;PHP&#20013;&#30340;&#20381;&#36182;&#27880;&#20837;&#28041;&#21450;&#29702;&#35299;&#26550;&#26500;&#35774;&#35745;&#27169;&#24335;&#24182;&#23558;&#20854;&#24212;&#29992;&#20110;&#20248;&#38597;&#22320;&#31649;&#29702;&#20320;&#30340;&#20381;&#36182;&#39033;&#12290;&#36890;&#36807;&#26500;&#36896;&#20989;&#25968;&#12289;setter&#25110;&#25509;&#21475;&#22522;&#30784;&#30340;&#27880;&#20837;&#65292;&#20320;&#21487;&#20197;&#20943;&#23569;&#32806;&#21512;&#24230;&#24182;&#25552;&#39640;PHP&#24212;&#29992;&#31243;&#24207;&#30340;&#27169;&#22359;&#21270;&#21644;&#21487;&#27979;&#35797;&#24615;&#12290;&#23545;&#20110;&#22823;&#22411;&#24212;&#29992;&#65292;&#21033;&#29992;DI&#23481;&#22120;&#21487;&#20197;&#31616;&#21270;&#20381;&#36182;&#39033;&#30340;&#31649;&#29702;&#65292;&#33410;&#30465;&#26102;&#38388;&#65292;&#24182;&#20351;&#20195;&#30721;&#24211;&#26356;&#20581;&#22766;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection, DI&#65289;&#26159;&#36719;&#20214;&#35774;&#35745;&#27169;&#24335;&#30340;&#19968;&#31181;&#65292;&#23427;&#26159;&#19968;&#31181;&#26550;&#26500;&#39118;&#26684;&#65292;&#20801;&#35768;&#24320;&#21457;&#32773;&#23558;&#23545;&#35937;&#30340;&#26500;&#24314;&#21644;&#23454;&#20363;&#21270;&#20998;&#31163;&#65292;&#24182;&#19988;&#21487;&#20197;&#21160;&#24577;&#22320;&#26367;&#25442;&#23545;&#35937;&#12290;&#22312;PHP&#20013;&#23454;&#29616;&#20381;&#36182;&#27880;&#20837;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992;&#24037;&#21378;&#26041;&#27861;&#25110;&#32773;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#26469;&#23436;&#25104;&#12290;<\/p>\n<h3>1. &#20351;&#29992;&#24037;&#21378;&#26041;&#27861;<\/h3>\n<p><strong>&#21407;&#29702;<\/strong>&#65306;&#21019;&#24314;&#19968;&#20010;&#24037;&#21378;&#31867;&#65292;&#36825;&#20010;&#24037;&#21378;&#36127;&#36131;&#21019;&#24314;&#21508;&#31181;&#32452;&#20214;&#30340;&#23545;&#35937;&#12290;<\/p>\n<pre><code class=\"language-php\">class ComponentFactory {\n    public function createComponent($type) {\n        switch ($type) {\n            case 'componentA':\n                return new ComponentA();\n            case 'componentB':\n                return new ComponentB();\n            \/\/ ... &#28155;&#21152;&#26356;&#22810;&#31867;&#22411;&#21644;&#23545;&#24212;&#31867;\n            default:\n                throw new Exception('Unknown component type');\n        }\n    }\n}\n\n\/\/ &#20351;&#29992;\n$factory = new ComponentFactory();\n$componentA = $factory-&gt;createComponent('componentA');<\/code><\/pre>\n<h3>2. &#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;<\/h3>\n<p><strong>&#21407;&#29702;<\/strong>&#65306;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#23481;&#22120;&#31649;&#29702;&#20840;&#23616;&#30340;&#20381;&#36182;&#20851;&#31995;&#12290;<\/p>\n<pre><code class=\"language-php\">use DoctrineCommonAnnotationsAnnotationRegistry;\nAnnotationRegistry::registerAutoLoading(__DIR__);\n\nfinal class Container {\n    private static $instances = [];\n\n    public function __construct() {\n        $this-&gt;container = [\n            'serviceA' =&gt; ['dependencies' =&gt; []],\n            'serviceB' =&gt; ['dependencies' =&gt; []],\n        ];\n    }\n\n    public static function get($id) {\n        if (!isset(self::$instances[$id])) {\n            self::$instances[$id] = new Service($id);\n        }\n        return self::$instances[$id];\n    }\n\n    public static function set($id, $instance) {\n        self::$instances[$id] = $instance;\n    }\n\n    public static function clear() {\n        self::$instances = [];\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#26381;&#21153;&#31867; <code>Service<\/code>&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;&#38656;&#35201;&#27880;&#20837;&#30340;&#26381;&#21153;&#65306;<\/p>\n<pre><code class=\"language-php\">class Service {\n    private $id;\n\n    public function __construct($id) {\n        $this-&gt;id = $id;\n    }\n\n    public function doSomething() {\n        echo \"Doing something for service {$this-&gt;id}\";\n    }\n}<\/code><\/pre>\n<p>&#35201;&#20351;&#29992;&#20381;&#36182;&#27880;&#20837;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#23481;&#22120;&#24182;&#27880;&#20837;&#26381;&#21153;&#65306;<\/p>\n<pre><code class=\"language-php\">$container = new Container();\n\n\/\/ &#27880;&#20837;&#26381;&#21153;&#21040;&#23481;&#22120;\n$container-&gt;set('serviceA', new Service('a'));\n$container-&gt;set('serviceB', new Service('b'));\n\n\/\/ &#20351;&#29992;&#27880;&#20837;&#30340;&#26381;&#21153;\necho $container-&gt;get('serviceA')-&gt;doSomething(); \/\/ &#36755;&#20986;: Doing something for service a\necho $container-&gt;get('serviceB')-&gt;doSomething(); \/\/ &#36755;&#20986;: Doing something for service b<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#25105;&#20204;&#21487;&#20197;&#30830;&#20445;&#27599;&#20010;&#26381;&#21153;&#37117;&#26377;&#33258;&#24049;&#30340;&#29983;&#21629;&#21608;&#26399;&#65292;&#32780;&#19981;&#20165;&#20165;&#26159;&#20381;&#36182;&#20110;&#20854;&#20182;&#26381;&#21153;&#30340;&#29366;&#24577;&#12290;&#36825;&#26679;&#20570;&#30340;&#22909;&#22788;&#21253;&#25324;&#26356;&#39640;&#30340;&#27169;&#22359;&#29420;&#31435;&#24615;&#21644;&#26356;&#22909;&#30340;&#27979;&#35797;&#22797;&#29992;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312;PHP&#20013;&#23454;&#29616;&#20381;&#36182;&#27880;&#20837;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#35774;&#35745;&#038;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[41],"tuisongtax":[],"class_list":["post-608","my1js","type-my1js","status-publish","hentry","my1js2nav-sjjg"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=608"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=608"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=608"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}