thinkphp源碼學習

簡介

https://github.com/top-think/think
https://github.com/top-think/frameworkphp

代碼格式

本項目代碼格式化標準選用 PSR-2;
類名和類文件名遵循 PSR-4;java

  • PSR-1 不帶BOM的utf-8
    類:首字母大寫的駝峯
    常量:所有大寫,下劃線分隔
    方法:小寫字母開頭的駝峯git

  • PSR-2 縮進:4空格
    每行的字符數應該軟性保持在80個內,理論上不可多於120個,但必定不能由硬性限制
    每一個namespace命名空間聲明語句和use聲明語句塊後面,必須插入一個空白行
    類的屬性和方法必須添加訪問修飾符(private protected以及public),abstract以及final必須聲明在訪問修飾符以前,而static必須聲明在訪問修飾符以後github

  • PSR-3 日誌接口規範sql

  • PSR-4 Autoloader 自動加載規範
    必需要有一個頂級命名空間
    類名必須與文件名一致ui

代碼規範和java很類似,能夠對比阿里java代碼規範《阿里巴巴開發手冊》spa

代碼

  • db.php
__callStatic
abstract class Builder
class Mysql extends Builder
abstract class Connection
class Mysql extends Connection
  • Model.php
    繼承了JsonSerializable,ArrayAccess
    數據放在 protected $data = [];
    $m->userid 時會調用魔術方法__get(),而後讀$data裏的值

    $m->field()->where() 用__call 加 call_user_func_array 實現調用 若是Model自身有這個方法,就調用自身的,沒有的話調用query裏的
    call_user_func_array([類, 方法], $args);

總結

  • php魔術方法:
    __call() 當方法不存在時,會調用__call
    __get() 獲取私有變量時會被調用
    __autoload() 嘗試加載未定義的類
相關文章
相關標籤/搜索