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() 尝试加载未定义的类
相关文章
相关标签/搜索