通過閱讀好的**,學習其中的設計思想和對設計模式的運用,來提公升自我**水平。
**版本:
├── factory.php // 庫入口,需要初始化哪個元件就生成哪個元件,例如 factory::officialaccount($config)
├── basicservice // 基礎服務
│ ├── contentsecurity
│ ├── jssdk
│ ├── media
│ ├── qrcode
│ └── url
├── kernel // 核心,包含模組的基礎類,以及執行模組所需要的支援
│ ├── accesstoken.php
│ ├── baseclient.php
│ ├── clauses
│ ├── config.php
│ ├── contracts
│ ├── ...
│ ├── auth // auth服務,每個服務下都有乙個serviceprovider.php,用於將自己的類繫結到容器。
│ ├── autoreply
│ ├── base
│ ├── broadcasting
│ ├── card
│ ├── comment
│ ├── ...
│ ├── auth
│ ├── authorizer
│ ├── ...
├── ...
使用示例:
$config=[
=>
'***'
,'secret'
=>
'*********x'
,'response_type'
=>
'array'
,//...];
= factory:
:officialaccount
($config);
$current=-
>
menu
->
current()
;
class
factory
;return
new(
$config);
}public
static
function
__callstatic
($name
,$arguments
)}
class
extends
servicecontainer
class
serviceprovider
implements
serviceproviderinte***ce
. */
public
function
register);
}}
在容器類的構造方法中,會通過registerproviders()
方法,最終呼叫pimple\container容器的register方法,將定義的服務註冊到服務容器中。
可見是呼叫了服務提供者的register方法,並將容器本身傳遞給服務提供者,和上面的**片段相呼應。
public
function
register
(serviceproviderinte***ce $provider
,array
$values
=array()
)return
$this
;}
比如這段**:
->
menu
->
current()
;
/**
* magic get access.
** @param string $id
** @return mixed
*/public
function
__get
($id
)return
$this
->
offsetget
($id);
}
arrayaccess是一組php內建介面,實現該介面的類需要實現offsetexists、offsetget、offsetset、offsetunset四個方法。
當以陣列方式呼叫類時,php就會引導到以上實現的方法中,這樣就實現了以陣列的方式操作類。
例如:在servicecontainer中use了withaggregator這個trait類,其中有一段**:
/**
* aggregate.
*/protected
function
aggregate()
}/**
* @return bool
*/public
function
shoulddelegate
($id
)
servicecontainer的繼承關係:servicecontainer extends pimple\container extends \arrayaccess
所以這個trait類的this指的就是container這個類的例項,因為container類實現了arrayaccess介面,所以這個例項支援陣列方式呼叫。
symfony的元件被廣泛使用,這裡easywechat使用了其中的三個元件,分別是:
symfony/cache
快取元件,提供了多種快取方式的實現,遵循了php-fig組織制定的psr-6快取標準。
symfony/event-dispatcher
mediator模式的實現
在php中,所述請求是由一些全域性變數表示($_get, $_post,$_files,$_cookie,$_session,...
)並且通過一些功能生成的響應(echo,header(),setcookie(),...
)。
httpfoundation元件通過物件導向層替換了這些預設的php全域性變數和函式。
然後還使用了其他的一些元件,如下:
封裝了curl請求
monolog\logger
寫log的元件,遵循了psr-3日誌標準。
pimple/pimple
ioc服務容器
todo
todo
原始碼學習 ArrayList的擴容原始碼分析
原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...
PicoContainer原始碼學習
介紹下自己,我叫stef wu,是個菜鳥,現在在easyjf團隊學習,得到了大峽等人的熱情幫助。本序列文章是以前在學習研究picocontainer時所記錄下來的,希望借本文,能和正在學習pico新手或者研究pico的高手一起交流學習。由於我水平不好,而且是真實的從頭到尾的記錄,所以其中,特別是前面...
PicoContainer原始碼學習
介紹下自己,我叫stef wu,是個菜鳥,現在在easyjf團隊學習,得到了大峽等人的熱情幫助。本序列文章是以前在學習研究picocontainer時所記錄下來的,希望借本文,能和正在學習pico新手或者研究pico的高手一起交流學習。由於我水平不好,而且是真實的從頭到尾的記錄,所以其中,特別是前面...