V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zencoding
V2EX  ›  分享创造

超轻量级 PHP 框架发布 - JunePHP

  •  
  •   zencoding ·
    wenpeng · 2014-07-05 18:10:01 +08:00 · 8041 次点击
    这是一个创建于 3793 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个框架因为写在6月份,就命名为了JunePHP。

    或许这个称不上一个框架,但是既然这样说了,就算它是吧

    目前体积控制在35K,以后慢慢会臃肿起来的

    项目地址: https://github.com/willper/JunePHP
    30 条回复    2014-07-07 12:01:36 +08:00
    eseeker
        1
    eseeker  
       2014-07-05 18:24:48 +08:00
    记得见到过一个类似的框架,也是以CI为基础写得,忘记名字了
    dongbeta
        2
    dongbeta  
       2014-07-05 18:35:52 +08:00
    这一行注定这个框架没法用:

    header("Content-type:text/html;charset=utf-8");
    dongbeta
        3
    dongbeta  
       2014-07-05 18:37:18 +08:00
    我仔细说一下吧:

    1. header("Content-type:text/html;charset=utf-8"); 限定了返回得 content type,影响用户做 API Server。
    ddzz
        4
    ddzz  
       2014-07-05 18:44:52 +08:00
    PHP框架,最需要的是一个强大的ORM,像django那样。对于MVC中的V和C,做不做都无所谓,PHP本身就是模板语言,不需要再开一套模板语法。对于controller,一个文件对应一个action就可以了,比如article_add.php
    article_edit.php
    article_delete.php
    dongbeta
        5
    dongbeta  
       2014-07-05 18:45:18 +08:00   ❤️ 1
    不好意思,手滑提交了。

    同理还有 exit("<meta http-equiv='Refresh' content='" . $time . ";URL=" .$url. "'>");

    2. 目录下面放 htaccess 是以前虚拟主机留下的习惯,现在已经不需要了。
    3. 这句同2理:if (!defined('ACCESS')) die('No direct script access allowed');
    4. model 层不建议一开始就自己做,是个大坑。可以先引入 laravel 的 database 部分。先从其他地方开始玩起。这样比较容易且能深入了解其他部分。
    5. 建议使用 space 而不是 tab 缩进。
    6. Application::__construct() 好多层

    我建议参考一下 Yii 和 Laravel 的实现。这是两个很好的范本,而且是两种不同的设计理念。如果继续感兴趣,建议看看 Ruby on Rails。因为 PHP 的框架对 RoR 的模仿根本达不到可以相提并论的层次。

    最后,PHP 程序员自己写框架,是一种很好的学习方法。建议楼主继续深入下去。
    yakczh
        6
    yakczh  
       2014-07-05 19:18:48 +08:00
    5.3以后php不需要框架了, 高仿ror的框架都是不怎么懂php的,这些框架只会把php在邪路上越扯越远,最后丧失php本身的优势
    eseeker
        7
    eseeker  
       2014-07-05 19:21:30 +08:00
    @ddzz 呵呵,我一直就是这么干的,所以用PHP开发从不用模板
    eseeker
        8
    eseeker  
       2014-07-05 19:24:19 +08:00
    @eseeker 打错了,是不用框架
    a591826944
        9
    a591826944  
       2014-07-05 19:24:46 +08:00
    我去 每个文件都要这一句?if (!defined('ACCESS')) die('No direct script access allowed');

    我上大二的时候 确实这么写过。。。
    dongbeta
        10
    dongbeta  
       2014-07-05 19:24:51 +08:00
    地图炮:没有用框架的php项目都是小项目。
    zhangsan
        11
    zhangsan  
       2014-07-05 19:37:58 +08:00
    不懂php 不是很明白这个函数

    function redirect($url, $time = 0) {
    if (!headers_sent()) {
    if ($time === 0) header("Location: ".$url);
    header("refresh:" . $time . ";url=" .$url. "");
    exit();
    } else {
    exit("<meta http-equiv='Refresh' content='" . $time . ";URL=" .$url. "'>");
    }
    }

    headers_sent

    http请求的response不是一次性发送完成的吗?还可以分布构造吗?
    raincious
        12
    raincious  
       2014-07-05 19:38:05 +08:00
    @ddzz 反对嗯……

    不是关于是否提供一个强大的ORM的。

    框架只是定义一个项目的管理方式。因此我做框架的时候不强制使用某个ORM或者其他组件,甚至于框架核心的附属结构都被设计成能替换的。唯一不能替换的只有框架核心(一个AutoLoader,但还是可以Overwrite不是么),来强制定义框架组件的加载方式。

    操作项目的时候可以根据团队需要来自己决定使用什么样的组件。

    框架用户应该可以决定喜欢什么类型的库。毕竟除了那几个高大上的大框架,其他框架本身就没有什么优势,强制绑架到某某东西上感觉更加不好。对吧?


    @a591826944

    你要看过Discuz的代码更得触目惊心了。这都是以前面向过程编程时留下的“余孽”。当然也有好的一面,所以这样的代码我还在用,比如放在临时文件和编译好的模板里。


    @yakczh

    嘿嘿嘿,AutoLoad框架(Composer),ORM框架,各种组件框架……细分了。
    xbonline
        13
    xbonline  
       2014-07-05 19:41:13 +08:00
    人生苦短,别造轮子
    raincious
        14
    raincious  
       2014-07-05 19:44:04 +08:00   ❤️ 1
    @zhangsan

    检查了headers_sent,如果响应头还没发送才会构建header,否则就输出一段HTML。

    如果OB用的对,那么这段HTML还是会被浏览器看到的。但是,这样重定向,好么?

    建议楼主再深入学习下,在学习之前写实现很多时候就是埋坑。
    TangMonk
        15
    TangMonk  
       2014-07-05 20:11:16 +08:00
    @yakczh 能详细说明下吗,我不是很懂 PHP
    muziyue
        16
    muziyue  
       2014-07-05 20:59:46 +08:00
    这种所谓的轻量级框架有什么意义呢...轻量级的东西我认为有一个封装好的数据库类就足以
    Seita
        17
    Seita  
       2014-07-05 22:31:59 +08:00
    真是高仿 CI 。。。
    zyx89513
        18
    zyx89513  
       2014-07-05 22:34:56 +08:00
    支持楼主, 轻量级的PHP框架还有个slim, 效率挺高的, 推荐一下
    yakczh
        19
    yakczh  
       2014-07-05 22:59:35 +08:00   ❤️ 1
    @TangMonk
    从技术层面讲
    同样是动态脚本,php跟ruby,python运行机制不一样,而是跟lua,js这种嵌入脚本是一类的,就是在宿主环境中嵌入处理器,每次请求都要从头来过,
    在这种嵌入机制下搞一个类似ror这种full stack的框架进去,就象写js在onload的时候先加载一个框架进来,不是说不可以,而是没有必要,只会增加很多无谓的开销,而且这个开销会随着业务量的线性增长而不断放大,等到有一天你想回头优化代码的时候,就会发现骑虎难下,整个系统牵一发而动全身,有需求变更想要扩展都是很难的
    2 从软件生态链方面 ror是一枝独大,众望所归,而且是经过多年实践检验的成熟产品 对于企业来说不用关心内部细节,敲个rails s 套模板写业务就行了, 对于开发者跳槽了到新的公司,原来积累的ror经验马上就能派上用场, 但在php这方面框架多如牛毛,采用框架首先面临选择的困惑,而且框架质量参差不齐,并不象ror在twitter经过实际业务的检验,有些框架只是个人兴趣产品,来劲了拼命推广,能忽悠一些不懂技术的土鳖小公司,没兴趣了,出了问题又不闻不问,1.0写了一坨,到2.0又不支持原来的写法了,重新搞一套又开始玩,公司如果选择了框架,原来php招人只需要求有php基础就可以,现在需要加一条,熟悉xx框架,无疑选择面就少了很多,团队开发的情况下, 很难短时间招到熟悉同一框架的程序员
    对于php新手来说,面对这么多框架也面临选择的困惑,这些框架虽然总体都差不多,但是具体配置参数,函数调用,模板语法都各不相同,跳槽到新公司以后,如果是不同的框架,又得重新熟悉另一套写法,为什么很多框架拥甭象打鸡血一样捍卫自己熟悉的框架,潜意识里其实是不想让自己为熟悉框架所花的心血打水漂,因为熟悉不同框架的用法并不能提高自己的技术水平,只是为了迎合公司的招聘要求,公司用框架也是想规范代码,屏蔽具体技术细节,降低总体人力成本,所以在这么多框架里面换来换去本身就是一件无意义的事

    我的观点是php不需要框架,只需要一个类似ror那样约定大于配置的最佳实践的目录结构 这个目录结构完全可以代替框架的作用,而且不用一行代码
    TangMonk
        20
    TangMonk  
       2014-07-06 09:53:59 +08:00
    @yakczh 谢谢您的回复,我之前用过国产的 ThinkPHP, 了解过 Laravel,sf, 用过一些 ror,后来改用 Drupal 在学校接外包。到现在我使用的是 Nodejs(express+socket.io)。

    经过你这么一说我突然觉得 express 不就是一个封装了 PHP 常用函数的东西吗, 我还舍近求远来搞 nodejs。。。
    TangMonk
        21
    TangMonk  
       2014-07-06 09:57:59 +08:00
    @yakczh 不过我很喜欢 js 的语法,相对 php 而言。。
    yakczh
        22
    yakczh  
       2014-07-06 10:20:55 +08:00
    @TangMonk js回调写多了麻烦,得用eventProxy,q,async之类的辅助工具来规范代码流程 不过nodejs正在发展中,这些问题以后慢慢肯定会得到解决 ,php刚出来的时候session都不带支持的 ,而且nodejs天生是面对高并发,node-http大概是原生php的2-3倍, express框架跟原生php相当,但是php框架是原生性能的30%左右 随着移动客户端的普及 ,服务端只提供restful api会慢慢成为主流,这方面nodejs更适合,淘宝已经把前端用nodejs替换了php
    explon
        23
    explon  
       2014-07-06 10:32:13 +08:00
    没什么出彩的地方
    maddot
        24
    maddot  
       2014-07-06 10:40:29 +08:00
    @yakczh 熟悉个PHP框架不就一两天的事情吗,如果这也是门槛,我只能说你招到的人根本啥也干不了,只会添堵。

    不需要框架的结果,就是自己造一个框架,需要大量时间去完善,而这些时间本来可以完全用在业务上的。是啊,锻炼了个人能力,但是公司出钱请你来是为业务服务的,不是请你来打怪练级。

    “只需要一个类似ror那样约定大于配置的最佳实践的目录结构 这个目录结构完全可以代替框架的作用,而且不用一行代码”

    什么目录这么强大,不需要一行代码,分享一下吧
    yakczh
        25
    yakczh  
       2014-07-06 11:55:22 +08:00
    从"熟悉个PHP框架不就一两天的事情" 这句话,可以看出每个人能力和禀赋都不同,象我就花了很长时间熟悉了fleaphp,然后作者开始推广qeephp,说这个更加高大上,花了很长时间熟悉了qeephp,作者看着手机游戏赚钱去搞游戏了,qeephp撒手不管了,又花了很长时间熟悉了yii ,作者推出2.0说不兼容1.0 就象狗熊掰玉米一样,到现在连个sql都写不好,而另一些人熟悉个框架只花1-2天时间,所以这个东西不象rps一样可以拿个基准测试程序跑一下就有定论,所以对于熟悉框架只花1-2天的人,还是留出更多的时间去给企业业务服务吧, 这里扯谈简直就是浪费钱,虽然现在还没见到用php框架的企业赚什么大钱,但只要这些人一天少扯谈,多把时间都花在业务上,将来肯定能赚大钱,如果再不赚钱就没天理了
    xuxu
        26
    xuxu  
       2014-07-06 12:05:50 +08:00
    “熟悉个PHP框架不就一两天的事情”
    不是半天吗?
    raincious
        27
    raincious  
       2014-07-06 13:40:13 +08:00
    @yakczh 说的有道理。这也是为什么我自己的项目一直坚持用我自己的框架。因为我不喜欢被人玩到半路然后对方我“抱歉,我不玩了”。

    但是PHP项目还是需要一个框架来支撑的,也就是我一直说的,位了统一一个编码规范和管理方式。这一点上用个框架其实是很有效的。
    yakczh
        28
    yakczh  
       2014-07-06 16:05:41 +08:00   ❤️ 1
    @raincious

    php框架是特定历史阶段的历史性产物,是因为php早期版本没有命名空间,为了防止代码膨胀以后失控的权益之计,是没有办法的办法, 跟很多框架拥甭争论到最后,一致的结论就是之所以用框架是可以硬性约束代码规范,有利于团队合作开发,实际中这也是框架能起到的最大作用, 但是php5.3以后已经加入了命名空间,加上composer dumpautoload 和psr规范,框架里面的很多代码可以省掉,如果是php早期版本下的项目,写框架还情有可原,但现在php都到5.5,5.6,还是折腾框架,就有点舍本求末了,就象受伤了,做手术治疗,现在伤好了,还继续做手术治疗就有点不可思议 php真正需要的不是这些杂七杂八的花架子框架,而是经过实际项目检验的类库, 因为真正能提高开发速度的不是框架,而是高质量的类库,而且不同的类库互相之间是相容的,对于码农来说,,第一个项目熟悉5个类库,第二个项目熟悉4个类库,以后再做项目,以前能用上的东西就可以直接用,代码重用率高,这样做东西越熟练,开发速度越快,而对于框架来说是互斥斥,熟悉了第一个框架用法,对换到第二个框架并没有多大用处,而且一个项目也不能同时用两个框架,如果框架出新版本,不兼容以前的版本,那基本还是要从头来过,就象狗熊掰了一辈子棒子,掰到最后,手里还是一个棒子
    raincious
        29
    raincious  
       2014-07-06 16:27:15 +08:00
    @yakczh

    Composer自己就可以视为Autoload框架,我已经说了,不是没有框架,只是框架细分了。

    而且你的想法是不对的。仅仅依靠PHP自己的代码管理规范远远无法满足哪怕中型项目的管理。我自己的框架在我使用的过程中根据所驱动项目的规模做过若干次大型变更,就是为了能让它适应各种规模的项目,并且根据项目规模提供不同的管理方式。

    你可以尝试将手头的项目脱离框架(或者你现在本身就没怎么使用)。在项目由一行代码变为10W行代码这样更迭的变化中,尝试估算下项目管理的成本,比如基本的代码管理、项目模块化、项目本身的依赖管理。然后考虑团队开发的情况。我想等你尝试过那些就能理解为什么很多公司开新项目还是需要一个框架来支撑了。

    另外,PHP是一种语言,就像是Ruby,本身没有项目管理功能。ROR是一个框架,自身有一套规范约束。


    > 如果框架出新版本,不兼容以前的版本,那基本还是要从头来过

    你说的其实是依赖问题。别忘了类库的API也会变更。另外基于这一点,学习其实本来就不是一个可以停止的过程。没有任何知识是永久有用的,只是一些知识的有效性长一些。

    当然,我不是建议去学那些本身就没什么价值的东西。
    tmkook
        30
    tmkook  
       2014-07-07 12:01:36 +08:00
    个人认为框架的核心就是重用和自动化
    一个重用率高的类库+各种自动化的工具(自动生成文档,自动测试,自动部署等等)
    然后加上一个清晰的目录结构就是一个完美的框架!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2748 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:42 · PVG 13:42 · LAX 21:42 · JFK 00:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.