V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wwwicbd
V2EX  ›  PHP

PHP 入门, 写了个简易框架

  •  
  •   wwwicbd · 2016-06-01 09:57:20 +08:00 · 4973 次点击
    这是一个创建于 3128 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/icbd/junior_framework

    PHP 入门, 写了个简易框架. 没大项目经验,想把框架丰富起来但是思路不清,恳请各位指点🙏

    26 条回复    2016-06-03 15:48:22 +08:00
    ybmimo
        1
    ybmimo  
       2016-06-01 10:03:02 +08:00 via Android   ❤️ 1
    写框架之前可以先参考下其他的流行框架是如何弄得,
    刚看了下,就当前的代码而言,有两个点可能需要调整下,第一个是应该用 composer 来组织代码,第二个是应该把入口文件 index.php 单独提出来放到 public 目录,目录名随意
    5dkgansm
        2
    5dkgansm  
       2016-06-01 10:03:37 +08:00
    不要为了丰富框架而去丰富,做成插件、扩展的形式怎么样?
    fruit
        3
    fruit  
       2016-06-01 10:16:47 +08:00
    @ybmimo 请问, index.php 放入目录中有什么优点?
    widdy
        4
    widdy  
       2016-06-01 10:56:31 +08:00
    @fruit 我的理解,这样的话 web 服务器把 index.php 的目录作为根目录,可以避免客户端访问到其它目录的敏感文件等。
    ybmimo
        5
    ybmimo  
       2016-06-01 13:10:37 +08:00 via Android
    widdy 正解,能提高安全性
    cxbig
        6
    cxbig  
       2016-06-01 15:03:02 +08:00
    - 参考一下如 Laravel 的加载机制,用 namespace 和 use ,都 php7 了还在 Hello::index 这样具体的 action 里用 require_once Twig_Autoloader 不合适, controller 应该有个基础类,处理 request 、 response ,加载各种基本组件等,其他实际的 controller 继承即可。
    - 另外 model 写成和 view 模板对应的类,那么和数据库对接的类放哪?层级关系怎么处理呢?
    Chappako
        7
    Chappako  
       2016-06-01 15:13:38 +08:00
    1. https://github.com/PizzaLiu/PHP-FIG 先读一下 FIG 标准吧,关于语法的标准,和自动加载的部分
    Chappako
        8
    Chappako  
       2016-06-01 15:19:21 +08:00
    1. https://github.com/PizzaLiu/PHP-FIG 先读一下 FIG 标准吧,关于语法的标准,和自动加载的部分
    2. 入口文件应该放到 public 或者 public_html 下,其他放在外面
    3. 第三方资位置,参考 FIG
    4. 框架名叫 Junior ,程序核心目录又叫 focus ,你是想逼死谁么?
    5. MVC 各层的抽象呢?
    6. 注释写什么 created by, date, time ,谁关心你这个啊,看 phpdoc 文档去
    tanteng
        9
    tanteng  
       2016-06-01 15:19:25 +08:00
    现在做框架貌似简单多了,用 composer 管理组件,一个路由功能,一个模板功能,就是最简单的框架了,要什么功能就装什么组件
    Moker
        10
    Moker  
       2016-06-01 15:24:15 +08:00
    @cxbig namespace 和 use 和 SPL 自动加载用起来爽翻天,再也不用担心文件忘记引用或者引用过多文件的问题
    Lpl
        11
    Lpl  
       2016-06-01 18:53:43 +08:00 via Android
    我有个问题...php 写框架很好写么?有个室友做 php 的,他说他写了好多框架了
    cxbig
        12
    cxbig  
       2016-06-01 21:48:13 +08:00   ❤️ 1
    @Lpl 框架这东西想怎么自定义都行,问题在于自己搭的框架别人可能不熟悉,那么团队合作就会有冲突。还有各种安全机制不一定做到位。光能跑起来是不够的。
    thenbsp
        13
    thenbsp  
       2016-06-01 21:55:26 +08:00
    define('DS', DIRECTORY_SEPARATOR);

    一直没搞懂这么定有什么意义?难道只是为了短?最早见过它是在 CakePHP 里,后来看过好几个开源项目都这么写,返正我是接受不了紧紧为了短一些就去得复定义一下常量。。。
    wjfz
        14
    wjfz  
       2016-06-01 21:57:30 +08:00
    @thenbsp
    为了避免在 Windows 下可能出现的问题。
    thenbsp
        15
    thenbsp  
       2016-06-01 22:06:12 +08:00
    @wjfz 这跟 windows 下出现问题有毛线关系,这货不就是目录分隔符嘛,我疑问的是为什么不直接使用 DIRECTORY_SEPARATOR 而非要把它再定义一遍?难道只是为了短?
    cankoor
        16
    cankoor  
       2016-06-01 22:15:30 +08:00
    缺少事件机制,可以加上。
    Jakesoft
        17
    Jakesoft  
       2016-06-02 01:02:01 +08:00
    我还写过一个 cms 呢,就不拿出来秀了
    freewheel
        18
    freewheel  
       2016-06-02 02:09:08 +08:00 via iPhone
    m
    wwwicbd
        19
    wwwicbd  
    OP
       2016-06-02 11:57:10 +08:00
    @cxbig
    谢谢.

    Model 和 Controller 的设计还没想好,.
    用 ThinkPHP 的时候把处理全放在 Controller 里了,Model 几乎没用到;
    用 Ruby on Rails 的时候 Model 就非常重.

    还有就是 Model 和 DB 之间分工, 这个也还没想清楚.
    wwwicbd
        20
    wwwicbd  
    OP
       2016-06-02 12:04:45 +08:00
    @Chappako
    谢谢.

    1. 看了 FIG 的文档, 挺有用. IDE 用的 phpstorm, code format 的默认选项和文档里的建议几乎全部一致.
    2. 已修改
    3. 本来想用 composer 的, 但在我机器上有些问题(分配了超多的内存然后警告退出)
    4. 已修改
    5. 各层抽象还是 to do list, 一步步写
    6. IDE 默认的
    wwwicbd
        21
    wwwicbd  
    OP
       2016-06-02 13:17:47 +08:00
    @thenbsp
    解决 Windows 和*nix 的目录分隔符不一致.
    环境是 OS X, 主要还是为了简写~
    cxbig
        22
    cxbig  
       2016-06-02 14:57:29 +08:00   ❤️ 1
    @wwwicbd
    - Model 分几个类,放不同的地方: 1. 和 DB 交互的, 2. 和 view template 互动的, 3. middleware 或 utility
    - Rails 可以把很多通用的 method 从 model 里抽出来,放 vender 或 lib ,成套的东西还可以自己做 gem
    thenbsp
        23
    thenbsp  
       2016-06-02 21:46:39 +08:00
    @wwwicbd 这个写法仅仅就是为短方便使用吧,根目录分隔符没一毛钱关系好不?目录分隔符不一致你简写一下一致了?
    wwwicbd
        24
    wwwicbd  
    OP
       2016-06-02 22:54:23 +08:00 via iPhone
    @thenbsp
    不用“ DS ”就用“/”了😂
    thenbsp
        25
    thenbsp  
       2016-06-03 14:45:45 +08:00
    @wwwicbd 我的问题是为什么要把 DIRECTORY_SEPARATOR 简写成 DS ,没有你直接写 "/"
    yorelog
        26
    yorelog  
       2016-06-03 15:48:22 +08:00
    DIRECTORY_SEPARATOR 这个变量就是为了解决在不同系统差异的,再定义个 DS 没法理解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:41 · PVG 03:41 · LAX 11:41 · JFK 14:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.