{"id":1039,"date":"2014-11-20T09:50:02","date_gmt":"2014-11-20T01:50:02","guid":{"rendered":"http:\/\/blog.turn.tw\/?p=1039"},"modified":"2014-11-20T09:50:02","modified_gmt":"2014-11-20T01:50:02","slug":"composer%e8%a8%ad%e8%a8%88%e5%8e%9f%e7%90%86%e8%88%87%e5%9f%ba%e6%9c%ac%e7%94%a8%e6%b3%95","status":"publish","type":"post","link":"https:\/\/blog.turn.tw\/?p=1039","title":{"rendered":"Composer\u8a2d\u8a08\u539f\u7406\u8207\u57fa\u672c\u7528\u6cd5"},"content":{"rendered":"<p>\u76f8\u4fe1\u6709\u5728\u7528PHP\u7684\u670b\u53cb\u8fd1\u5e74\u4f86\u5e38\u807d\u5230composer\u9019\u500b\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u3002<br \/>\n\u5b83\u5230\u5e95\u662f\u505a\u4ec0\u9ebc\u7528\u7684\uff1f\u53c8\u662f\u70ba\u4e86\u89e3\u6c7a\u4ec0\u9ebc\u554f\u984c\u800c\u5b58\u5728\u5462\uff1f<br \/>\n\u8981\u77ad\u89e3\u9019\u500b\uff0c\u5f97\u5148\u5f9e\u6b77\u53f2\u958b\u59cb\u8aaa\u8d77&#8230;\u3002<\/p>\n<h3>PHP\u6700\u65e9\u8b80\u53d6\u5957\u4ef6\u7684\u65b9\u6cd5<\/h3>\n<p>\u521d\u5b78PHP\u6642\uff0c\u6700\u65e9\u6703\u9762\u5c0d\u7684\u554f\u984c\u4e4b\u4e00\u5c31\u662frequire\u8207include\u5dee\u5225\u4f55\u5728\uff1f<br \/>\nrequire_once\u8207include_once\u53c8\u662f\u4ec0\u9ebc\uff1f<br \/>\n\u5f04\u61c2\u9019\u4e9b\u554f\u984c\u4e4b\u5f8c\uff0c\u5982\u679c\u4e0d\u4f7f\u7528framework\uff0c\u76f4\u63a5\u958b\u767c\uff0c\u4fbf\u5e38\u51fa\u73fe\u985e\u4f3c\u9019\u6a23\u7684code\uff1a<\/p>\n<pre>\r\n\/\/ whatever.php\r\n\/\/ \u9019\u6a94\u6848\u9700\u8981\u7528\u5230\u5e7e\u500b\u985e\u5225\r\nrequire 'xxx_class.php';\r\nrequire 'yyy_class.php';\r\nrequire 'zzz_class.php';\r\n\/\/ ...\r\n<\/pre>\n<p>\u7136\u5f8c\u5728\u5176\u4ed6\u6a94\u6848\u6703\u51fa\u73fe\uff1a<\/p>\n<pre>\r\n\/\/ another.php\r\n\/\/ \u9019\u6a94\u6848\u9700\u8981\u7528\u5230\u5e7e\u500b\u985e\u5225\r\nrequire 'yyy_class.php';\r\nrequire 'zzz_class.php';\r\n\/\/ ...\r\n<\/pre>\n<p>\u9019\u6a23\u7684\u7d50\u679c\uff0c\u6703\u7522\u751f\u81f3\u5c11\u5169\u500b\u554f\u984c\uff1a<br \/>\n1. \u8a31\u591a\u6a94\u6848\u7528\u5230\u540c\u6a23\u5e7e\u500bclass\uff0c\u65bc\u662f\u5728\u4e0d\u540c\u5730\u65b9\u90fd\u9700\u8981\u8f09\u5165\u4e00\u6b21\u3002<br \/>\n2. \u7576\u985e\u5225\u591a\u4e86\u8d77\u4f86\uff0c\u6703\u986f\u5f97\u5f88\u4e82\u3001\u5fd8\u8a18\u8f09\u5165\u6642\u9084\u6703\u51fa\u73feerror\u3002<\/p>\n<p>\u90a3\u9ebc\uff0c\u4e0d\u5982\u8a66\u8a66\u4e00\u7a2e\u61f6\u60f0\u7684\u4f5c\u6cd5\uff1f<br \/>\n\u5beb\u4e00\u500bphp\uff0c\u8ca0\u8cac\u8f09\u5165\u6240\u6709\u985e\u5225\uff1a<\/p>\n<pre>\r\n\/\/ load_everything.php\r\nrequire 'xxx_class.php';\r\nrequire 'yyy_class.php';\r\nrequire 'zzz_class.php';\r\nrequire 'aaa_class.php';\r\nrequire 'bbb_class.php';\r\nrequire 'ccc_class.php';\r\n<\/pre>\n<p>\u7136\u5f8c\u5728\u5176\u4ed6\u6a94\u6848\u90fd\u8f09\u5165\u9019\u652f\u6a94\u6848\u5373\u53ef\uff1a<\/p>\n<pre>\r\nrequire 'load_everything.php'\r\n<\/pre>\n<p>\u7d50\u679c\u65b0\u554f\u984c\u53c8\u4f86\u4e86\uff1a\u7576\u985e\u5225\u5f88\u591a\u7684\u6642\u5019\uff0c\u96a8\u4fbf\u4e00\u500bweb page\u90fd\u6703\u8f09\u5165\u4e00\u5806code\uff0c\u5403\u7206\u8a18\u61b6\u9ad4\uff0c\u600e\u9ebc\u8fa6\u5462\uff1f<\/p>\n<h3>__autoload<\/h3>\n<p>\u70ba\u4e86\u89e3\u6c7a\u9019\u500b\u554f\u984c\uff0cPHP 5\u958b\u59cb\u63d0\u4f9b__autoload\u9019\u7a2e\u4fd7\u7a31\u300cmagic method\u300d\u7684\u51fd\u5f0f\u3002<br \/>\n\u7576\u4f60\u8981\u4f7f\u7528\u7684\u985e\u5225PHP\u627e\u4e0d\u5230\u6642\uff0c\u5b83\u6703\u5c07\u985e\u5225\u540d\u7a31\u7576\u6210\u5b57\u4e32\u4e1f\u9032\u9019\u500b\u51fd\u5f0f\uff0c\u5728PHP\u5674error\u6295\u964d\u4e4b\u524d\uff0c\u505a\u6700\u5f8c\u7684\u5617\u8a66\uff1a<\/p>\n<pre>\r\n\/\/ autoload.php\r\nfunction __autoload($classname) {\r\n    if ($classname === 'xxx.php'){\r\n        $filename = \".\/\". $classname .\".php\";\r\n        include_once($filename);\r\n    } else if ($classname === 'yyy.php'){\r\n        $filename = \".\/other_library\/\". $classname .\".php\";\r\n        include_once($filename);\r\n    } else if ($classname === 'zzz.php'){\r\n        $filename = \".\/my_library\/\". $classname .\".php\";\r\n        include_once($filename);\r\n    }\r\n    \/\/ blah\r\n}\r\n<\/pre>\n<p>\u4e5f\u56e0\u70baPHP\u9019\u7a2e\u300c\u6295\u964d\u524d\u6700\u5f8c\u4e00\u6b21\u5617\u8a66\u300d\u7684\u884c\u70ba\uff0c\u6709\u6642\u6703\u8b93\u6c92\u6ce8\u610f\u5230\u7684\u4eba\u56f0\u60d1\u300c\u5947\u602a\u6211\u7684code\u600e\u9ebc\u8dd1\u5f97\u52d5\uff1f\u6211\u6839\u672c\u6c92\u6709require\u554a..\u300d\uff0c\u6240\u4ee5\u88ab\u7a31\u70ba\u300cmagic method\u300d\u3002<br \/>\n\u5982\u6b64\u4e00\u4f86\uff0c\u554f\u984c\u4f3c\u4e4e\u89e3\u6c7a\u4e86\uff1f<br \/>\n\u53ef\u60dc\u9084\u662f\u6709\u5c0f\u7f3a\u9ede..\uff0c\u5c31\u662f\u9019\u500b__autoload\u51fd\u5f0f\u5167\u5bb9\u6703\u8b8a\u5f97\u5f88\u5de8\u5927\u3002\u4ee5\u4e0a\u9762\u7684\u4f8b\u5b50\u4f86\u8aaa\uff0c\u4e00\u4e0b\u6703\u53bb\u6839\u76ee\u9304\u627e\u3001\u4e00\u4e0b\u6703\u53bbother_library\u8cc7\u6599\u593e\u3001\u4e00\u4e0b\u6703\u53bbmy_library\u8cc7\u6599\u593e\u5c0b\u627e\u3002\u5728\u6574\u7406\u6a94\u6848\u7684\u6642\u5019\uff0c\u986f\u5f97\u6709\u4e9b\u6df7\u4e82\u3002<\/p>\n<h3>spl_autoload_register<\/h3>\n<p>\u65bc\u662fPHP\u5f9e5.1.2\u958b\u59cb\uff0c\u591a\u63d0\u4f9b\u4e86\u4e00\u500b\u51fd\u5f0f\u3002<br \/>\n\u53ef\u4ee5\u591a\u5beb\u5e7e\u500bautoload\u51fd\u5f0f\uff0c\u7136\u5f8c\u8a3b\u518a\u8d77\u4f86\uff0c\u6548\u679c\u8ddf\u76f4\u63a5\u4f7f\u7528__autoload\u76f8\u540c\u3002<br \/>\n\u73fe\u5728\u53ef\u4ee5\u91dd\u5c0d\u4e0d\u540c\u7528\u9014\u7684\u985e\u5225\uff0c\u5206\u6279autoload\u4e86\u3002<\/p>\n<pre>\r\nspl_autoload_register('my_library_loader');\r\nspl_autoload_register('other_library_loader');\r\nspl_autoload_register('basic_loader');\r\n\r\nfunction my_library_loader($classname) {\r\n    $filename = \".\/my_library\/\". $classname .\".php\";\r\n    include_once($filename);\r\n}\r\nfunction other_library_loader($classname) {\r\n    $filename = \".\/other_library\/\". $classname .\".php\";\r\n    include_once($filename);\r\n}\r\nfunction basic_loader($classname) {\r\n    $filename = \".\/\". $classname .\".php\";\r\n    include_once($filename);\r\n}\r\n<\/pre>\n<p>\u6bcf\u500bloader\u5167\u5bb9\u53ef\u4ee5\u505a\u5f88\u591a\u8b8a\u5316\u3002\u53ef\u4ee5\u591a\u5beb\u5224\u65b7\u5f0f\u8b93\u5b83\u66f4\u667a\u6167\u3001\u53ef\u4ee5\u9032\u884c\u5b57\u4e32\u8655\u7406&#8230;\u3002<br \/>\n\u81ea\u52d5\u8f09\u5165\u985e\u5225\u7684\u554f\u984c\u7d42\u65bc\u89e3\u6c7a\u4e86&#8230;\u3002<\/p>\n<p><i>\u4f46\u662f\u5149\u4e0a\u9762\u7684code\u4e5f\u670915\u884c\uff0c\u800c\u4e14\u5728\u6bcf\u500bproject\u4e00\u5b9a\u90fd\u6703\u5beb\u985e\u4f3c\u7684\u6771\u897f\u3002\u6709\u6c92\u6709\u8fa6\u6cd5\u81ea\u52d5\u7522\u751f\u901915\u884c\u5462\uff1f<br \/>\n\u6211\u7684\u9858\u671b\u5f88\u7c21\u55ae\uff0c\u6211\u544a\u8a34\u4f60\uff0c\u53cd\u6b63\u6211\u6709my_library\u8cc7\u6599\u593e\u8ddfother_library\u8cc7\u6599\u593e\uff0c\u4f60\u81ea\u5df1\u9032\u53bb\u770b\u5230\u4ec0\u9ebc\u985e\u5225\u5c31\u5168\u90e8\u8f09\u5165\u597d\u4e0d\u597d&#8230;\uff1f<br \/>\n\u963f\u4e0d\u5c0d\uff0c\u5168\u90e8\u8f09\u5165\u525b\u53c8\u8aaa\u6548\u80fd\u4e0d\u597d\uff0c\u90a3\u4f60\u9032\u53bb\u770b\u5230\u4ec0\u9ebc\u5c31\u5168\u90e8\u60f3\u8fa6\u6cd5\u7528spl_autoload_register\u8a18\u8d77\u4f86\u597d\u4e0d\u597d&#8230;\uff1f<br \/>\n\u6211\u61f6\u5f97\u625315\u884c\u4e86\uff0c\u6211\u53ea\u60f3\u6253\u9019\u5e7e\u500b\u5b57\uff1a<\/i><\/p>\n<pre>\r\n$please_autoload = array( 'my_library', 'other_library');\r\n<\/pre>\n<p><i>\u53ef\u4e0d\u53ef\u4ee5\u767c\u660e\u4e00\u500b\u5de5\u5177\uff0c\u53bb\u5403$please_autoload\u9019\u500b\u8b8a\u6578\uff0c\u7136\u5f8c\u81ea\u5df1\u60f3\u8fa6\u6cd5\u8f09\u5165\u4e00\u5207\u554a&#8230;\uff1f<\/p>\n<p>\u311f\u7b49\u7b49\uff0c\u6211\u9023php\u7a0b\u5f0f\u78bc\u90fd\u61f6\u5f97\u6253\u4e86\uff0c\u5728web\u9818\u57dfJSON\u683c\u5f0f\u66f4\u7c21\u6f54\u3002\u5141\u8a31\u6211\u9019\u6a23\u6253\uff0c\u597d\u55ce\uff1f<\/i><\/p>\n<pre>\r\n{\r\n    \"autoload\": [\r\n        \"my_library\",\r\n        \"other_library\"\r\n    ]\r\n}\r\n<\/pre>\n<p><i>\u7136\u5f8c\u8ab0\u4f86\u500b\u5de5\u5177\u5e6b\u6211\u7522\u751f\u4e00\u5927\u4e32autoload\u76f8\u95dc\u7684php\u7a0b\u5f0f\u78bc\u5427&#8230;\uff0c\u53ef\u4ee5\u55ce\uff1f<\/i><\/p>\n<h1>\u53ef\u4ee5\u3002<\/h1>\n<h1>Composer\u767b\u5834<\/h1>\n<p>\u9996\u5148\uff0c\u88dd\u597dcomposer(\u672c\u6587\u4e0d\u4ecb\u7d39\u5982\u4f55\u5b89\u88dd\u3002)<br \/>\n\u518d\u4f86\uff0c\u5efa\u7acb\u4e00\u500bcomposer.json\u6a94\uff0c\u88cf\u9762\u8f38\u5165\u9019\u4e9b\uff1a<\/p>\n<pre>\r\n{\r\n    \"autoload\": {\r\n        \"classmap\": [\r\n            \"my_library\",\r\n            \"other_library\"\r\n        ]\r\n    }\r\n}\r\n<\/pre>\n<p>\u6bd4\u539f\u672c\u5e0c\u671b\u7684\u591a\u6253\u4e86\u4e00\u4e9b\u5b57\uff0c\u4e0d\u904e\u5dee\u4e0d\u591a\u3002<br \/>\n\u518d\u4f86\uff0c\u5728terminal\u8f38\u5165<\/p>\n<pre>\r\ncomposer install\r\n<\/pre>\n<p>\u57f7\u884c\u6210\u529f\u4e4b\u5f8c\uff0c\u4f60\u6703\u770b\u5230\u4e00\u500bvendor\u8cc7\u6599\u593e\uff0c\u5167\u542b\u4e00\u500bautoload.php\u3002<br \/>\n\u6c92\u932f\uff0c\u8ddf\u4f60\u5922\u60f3\u7684\u4e00\u6a23\u3002\u4f60\u53ea\u8981\u8f09\u5165\u9019\u500b\u6a94\u6848\uff1a<\/p>\n<pre>\r\nrequire 'vendor\/autoload.php';\r\n<\/pre>\n<p>\u4f60\u9700\u8981\u7684\u6240\u6709\u985e\u5225\uff0c\u90fd\u6703\u5728\u9069\u7576\u7684\u6642\u5019\u3001\u4ee5\u9069\u7576\u7684\u65b9\u5f0f\u81ea\u52d5\u8f09\u5165\u3002<br \/>\nphp\u518d\u4e5f\u4e0d\u6703\u5674error\u8aaa\u4f60\u300c\u985e\u5225\u5c1a\u672a\u5b9a\u7fa9\u300d\u4e86\uff01<br \/>\n\u9019vendor\u8cc7\u6599\u593e\u88cf\u9762\u7684\u4e00\u5207\uff0c\u90fd\u53ea\u662fphp code\u800c\u5df2\uff0c\u4e26\u6c92\u6709\u7279\u5225\u795e\u5947\u7684\u5730\u65b9\u3002\u53ea\u8981\u53bb\u770bautoload.php\u7684\u539f\u59cb\u78bc\uff0c\u5c31\u80fd\u77e5\u9053composer\u5230\u5e95\u5beb\u4e86\u54ea\u4e9bphp code\u7d66\u4f60\u3002<\/p>\n<p><i>\u311f\u7b49\u7b49\uff0c\u6211\u5beb\u7684\u985e\u5225\u90fd\u653e\u5728my_library\u88cf\u9762\u4e86\uff0cother_library\u90fd\u662f\u7db2\u8def\u4e0acopy\u4e0b\u4f86\u7684\u73fe\u6210\u985e\u5225\u3002\u6211\u60f3\u8981\u7528Google API\u7684Client\u985e\u5225\u3001Doctrine\u8cc7\u6599\u5eab\u7ba1\u7406\u62bd\u8c61\u5c64\u985e\u5225\u3001\u9084\u6709guzzlehttp\u7684\u767c\u9001request\u985e\u5225\u3002<br \/>\n\u6211\u9023\u53bb\u4e0b\u8f09\u9019\u4e9b\u6a94\u6848\u3001\u7136\u5f8c\u4e1f\u9032\u9019\u500b\u8cc7\u6599\u593e\u90fd\u61f6\u5f97\u505a\u4e86\uff0c\u6211\u6839\u672c\u4e0d\u60f3\u624b\u52d5\u5efa\u7acbother_library\u9019\u500b\u8cc7\u6599\u593e\u3002composer\u771f\u90a3\u9ebc\u795e&#8230;\u4e0d\u5982\u9023\u4e0b\u8f09\u90fd\u5e6b\u6211\u81ea\u52d5\u4e0b\u8f09\uff1f\u53ef\u4ee5\u55ce\uff1f<\/i><\/p>\n<h1>\u53ef\u4ee5\u3002<\/h1>\n<p>\u67e5\u8a62\u4e00\u4e0b\u90a3\u5e7e\u500b\u5957\u4ef6\u5728\u300chttps:\/\/packagist.org\/\u300d\u7684\u540d\u7a31\u3001\u9084\u6709\u4f60\u9700\u8981\u7684\u7248\u672c\u865f\u3002<br \/>\n\u628a\u525b\u525b\u7684composer.json\u6539\u6210\u9019\u6a23\uff1a<\/p>\n<pre>\r\n{\r\n    \"require\": {\r\n        \"google\/apiclient\": \"1.0.*@beta\",\r\n        \"guzzlehttp\/guzzle\": \"~4.0\",\r\n        \"doctrine\/dbal\": \"~2.4\"\r\n    },\r\n\r\n    \"autoload\": {\r\n        \"classmap\": [\r\n            \"my_library\"\r\n        ]\r\n    }\r\n}\r\n<\/pre>\n<p>\u7136\u5f8c&#8217;composer install&#8217;\u6307\u4ee4\u9664\u4e86\u81ea\u52d5\u8f09\u5165\u4f60\u7684\u985e\u5225\u4e4b\u5916\u3001\u9084\u6703\u81ea\u52d5\u4e0b\u8f09\u4f60\u9700\u8981\u7684\u985e\u5225\u3001\u7136\u5f8c\u81ea\u52d5\u8f09\u5165\u5b83\u5011\u3002<br \/>\n\u4e00\u6a23require &#8216;vendor\/autoload.php&#8217;\u5c31\u53ef\u4ee5\u4e86\u3002composer\u5be6\u5728\u662f\u592a\u68d2\u4e86\u3002<\/p>\n<p>\u5176\u5be6composer\u89e3\u6c7a\u7684\u554f\u984c\u4e0d\u53ea\u9019\u6a23\u3002<br \/>\n\u985e\u5225\u591a\u4e86\u8d77\u4f86\u4e4b\u5f8c\uff0c\u5404\u7a2e\u7a0b\u5f0f\u8a9e\u8a00\u90fd\u63d0\u4f9bnamespace\u529f\u80fd\u5354\u52a9\u5206\u985e\u3002<br \/>\n\u5728\u6709namespace\u7684\u60c5\u6cc1\u4e0b\uff0cPHP\u793e\u7fa4\u8207composer\u662f\u5982\u4f55\u89e3\u6c7a\u81ea\u52d5\u8f09\u5165\u7684\u554f\u984c\u5462\uff1f<br \/>\n\u9019\u4e9b\u6bd4\u8f03\u9032\u968e\u7684\u5167\u5bb9\uff0c\u4e0b\u56de\u5206\u66c9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u76f8\u4fe1\u6709\u5728\u7528PHP\u7684\u670b\u53cb\u8fd1\u5e74\u4f86\u5e38\u807d\u5230composer\u9019\u500b\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u3002 \u5b83\u5230\u5e95\u662f\u505a\u4ec0\u9ebc\u7528\u7684\uff1f\u53c8\u662f\u70ba\u4e86\u89e3\u6c7a\u4ec0\u9ebc\u554f\u984c &hellip; <a href=\"https:\/\/blog.turn.tw\/?p=1039\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Composer\u8a2d\u8a08\u539f\u7406\u8207\u57fa\u672c\u7528\u6cd5<\/span> <span class=\"meta-nav\">&rarr;<\/span> <\/a><\/p>\n","protected":false},"author":1,"featured_media":1052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[2],"tags":[20,18,19],"_links":{"self":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/posts\/1039"}],"collection":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1039"}],"version-history":[{"count":17,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/posts\/1039\/revisions"}],"predecessor-version":[{"id":1058,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/posts\/1039\/revisions\/1058"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/media\/1052"}],"wp:attachment":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}