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

关于 PHP 的学习,请教下大神

  •  
  •   Caratpine · 2015-05-22 11:17:23 +08:00 · 4798 次点击
    这是一个创建于 3507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一次在V2EX上发言,如果格式和语气不太对的地方,还请多指教。

    我是一个入门的PHPer,在校学生,懂得PHP的基本语法,会一些主流的PHP框架,也拿框架练过一些项目。做的项目里面我发现,我一直都是在CRUD,反思一下,发现自己进步好少,想深入学习PHP,有点茫然了,不知道该学些什么了。之前和朋友交流,他说PHP本身没什么可学的,再往深学就都是些服务端的东西了,请大神们指教一二,我该学些什么东西。
    

    谢谢~

    36 条回复    2015-05-29 23:50:32 +08:00
    minishine90
        1
    minishine90  
       2015-05-22 11:39:47 +08:00
    其实PHP更深层的东西以及牵涉的东西还有很多,比如MVC、缓存、处理高并发 各种…楼主只是还没有机会接触到这些!
    zzxworld
        2
    zzxworld  
       2015-05-22 11:39:52 +08:00
    你该学习做项目了
    fangjinmin
        3
    fangjinmin  
       2015-05-22 11:42:27 +08:00
    我不是大神。
    我觉得首先要明白单是语言其实可学很少,更多的使用熟悉程度和编程的技巧。
    想要提高,就要脱离语言,看得更远一点。比如说自己去想一个东西或者项目,
    去实现它,去解决实际中的问题,这样才能提高。
    Caratpine
        4
    Caratpine  
    OP
       2015-05-22 11:46:54 +08:00
    @minishine90 MVC我大概懂得工作原理,试着看过ThinkPHP的源码,缓存我听过memcache,我感觉这些我现在都用不到啊,能否指点一下进阶的学习道路,谢谢
    mcfog
        5
    mcfog  
       2015-05-22 11:48:09 +08:00
    增 如何设计合理的数据结构?
    删 硬删除/软删除?灾备?
    改 并发冲突?事务?数据迁移?
    查 索引?搜索?联表vs分次?复杂查询 vs 额外建表? 缓存?

    12306也是增删改查
    淘宝京东也是增删改查

    没错,写代码不过是增删改查,做寿司不过是饭上放片鱼而已

    -----

    抄自我自己
    mhycy
        6
    mhycy  
       2015-05-22 11:50:07 +08:00
    看你的方向.
    ===============================================
    任何时候语言都不应该是学习的目标,这只是通往某个目标的一个必备的工具而已.
    作为在校学生, 你有足够的时间巩固自身的基础知识, 别局限在PHP.
    因为这门最好的语言是面向WEB设计的.总会有诸多方面的不足.

    找一个方向,并为此进发..
    语言?工具而已~

    的确你该做个项目深入理解各个模块的功用了~
    不是PHP的模块, 是项目上的~
    寻找解决方案应对实际的各种需求是程序员的基础能力.

    但是, 很遗憾的告诉你, 如果你现在开始做项目, 你就会陷入过早优化的泥坑.
    因为经验不足, 你会在代码的各处都进行过早的无意义的优化, 但是好的代码是迭代出来的.
    但矛盾的是你需要老老实实的编码, 以寻找出最合理的最合适的编码方式.
    建议做些小项目吧.框架\缓存\高并发?没有合适的场景你不可能做出合理的设计的.

    一切的后续选择均要看你现在选择未来的方向.好好选择吧~
    祝成功~
    moro
        7
    moro  
       2015-05-22 11:50:59 +08:00   ❤️ 1
    你需要接触负载量大的业务,然后就有机会解决并发产生的数据一致性问题,性能问题,软件迭代产生的软件架构和硬件架构问题。
    mhycy
        8
    mhycy  
       2015-05-22 11:52:20 +08:00
    @moro 深有体会
    xlmo
        9
    xlmo  
       2015-05-22 11:52:54 +08:00
    其实很简单。把你做的项目放到不同的场景去(日PV从1到1亿),确保它还能正常运行。
    你自己就会知道该学些什么了。
    Caratpine
        10
    Caratpine  
    OP
       2015-05-22 12:05:16 +08:00
    @mhycy 十分感谢,我理解您的意思,我在拉勾上看招PHP研发工程师,发现很多技术我都不懂,我也并不想局限于PHP,我也搞过ACM,数据挖掘,只是现在跳进了PHP这个坑,我想深入学习一下,不想什么都只懂皮毛,我现在在跟老师做一个创业项目,产品还没有上线,所以很多技术我都还没有遇到过啊
    Caratpine
        11
    Caratpine  
    OP
       2015-05-22 12:07:23 +08:00
    @moro 您的意思是我应该找份实习,去体会一下实际开发过程中遇到的问题吗?
    mhycy
        12
    mhycy  
       2015-05-22 12:13:58 +08:00   ❤️ 1
    @Caratpine
    要深入就把基础都学牢了.
    编译原理/算法到理论/数据结构
    搞过ACM的应该不是难事...

    其实你现阶段需要把基础学好, 还有知识面的广度.
    知识面足够广你自然知道需要学到多深入.
    说白了还是与未来目标有关...

    其实深入Web开发的第一步就是获得足够广的知识,然后再选一个方向深入.
    不然你选了也没法深入~
    mhycy
        13
    mhycy  
       2015-05-22 12:14:35 +08:00
    @Caratpine
    现在就找实习就太浮躁了...
    Caratpine
        14
    Caratpine  
    OP
       2015-05-22 12:23:50 +08:00
    @mhycy 唔,十分感谢,受教了。
    dog999
        15
    dog999  
       2015-05-22 12:31:43 +08:00
    sampeng
        16
    sampeng  
       2015-05-22 12:39:02 +08:00
    物联网编程,无非就是增删改查。。。
    RemRain
        17
    RemRain  
       2015-05-22 13:01:23 +08:00   ❤️ 3
    往深处学习,是永远学不完的,既然 LZ 感到茫然,我就说下自己在面试中,比较爱问的几个问题:

    1. PHP 的数组作 Map 用时,给定一个 key,能很快找到 value,在遍历 Map 的时候,还能保证顺序不变,如何才能实现这样一个 Map。(注:Java HashMap、Perl 哈希是无序的)

    2. 如何才能实现 PHP 的弱类型?

    3. Cookie 与 Session 的区别?有了解过 PHP Session 的存储方式吗?多台服务器如何保证 Session 一致?

    4. 你用的是 Apache 还是 Nginx?Apache/Nginx 和 PHP 有什么关系?是 Apache/Nginx 执行的 PHP 脚本吗?服务器能同时处理多个 PHP 请求吗(如何做到的)?


    这几个问题只要能答对一个,那说明面试者是有钻研精神,真正了解过 PHP 的,即使换一门语言,也能很快上手的人才
    whatisnew
        18
    whatisnew  
       2015-05-22 13:13:02 +08:00
    @RemRain 别学 session cookie 了,完全没有用,多了解一下 http tcp 协议是正道
    mhycy
        19
    mhycy  
       2015-05-22 13:19:31 +08:00
    @RemRain
    尝试回答:

    第一问:
    底层C实现的时候创建两个动态数组(动态数组本身的实现不在此题目范围内)
    一个是Key数组, 一个是Value数组, 二者存放的都是数据指针. 同时写入/修改二者
    查询的时候遍历Key数组,记录偏移, 获取Key所在的的位置, 那么Key所在的位置就是Value的位置
    自然遍历的时候只要按顺序取出就行了

    第二问:
    用结构体来记录指针,类型.
    如果需要转换的话调取相应的转换函数进行处理..
    具体情况具体分析

    第三问:
    Cookie是把数据记录在客户端, Session是给客户端一个Session索引, 数据存放在服务器.
    索引的维护由PHP底层进行处理.
    一般配置是存放成文件, 当然也可以有其他选择
    多台服务器保持Session一致需要有一个同步机制或者一个集中储存机制.
    最简单的做法就是把Session设定为一个远程端文件夹,可通过NAS方式挂载.

    第四问:
    无论是啥,都是一个服务器程序而已...
    其中Apache直接调取PHP的扩展库进行请求处理.
    Nginx需要反代一个处理程序(因为这货就是代理服务器而已)
    服务器可同时实现多请求并发,如何做到请给回答方向.
    如果只需要关键字: 多线程 多进程 事件循环...
    mhycy
        20
    mhycy  
       2015-05-22 13:19:53 +08:00
    @whatisnew 入门刚好~
    moro
        21
    moro  
       2015-05-22 13:39:21 +08:00
    其实你只要看看你下一阶段目标的要求,你就知道你最应该学什么。
    比如你现在是学生,下一阶段应该是实习生,或者初级工程师,你就看看网上这些职位的招聘要求,汇总一下,或者你可以多看几阶,这样就可以快速跳级。
    kemikemian
        22
    kemikemian  
       2015-05-22 13:58:22 +08:00
    燕十八的什么高级学习,你搜索一下吧,那里面php要学习的知识都在里面,提高很有好处
    mrgump
        23
    mrgump  
       2015-05-22 14:03:39 +08:00
    实战练习,解决一个个实际的问题,不断寻找更大的挑战,要不学那么多理论没用。
    lshero
        24
    lshero  
       2015-05-22 14:47:28 +08:00
    工作两三年的文科生PHP码农表示 别看拉钩那些要求很多都是复制粘贴的。就因为是胶水语言给那么点薪水还想让PHPer把DBA、运维、前端的活全包了。

    真要到了编码工作分工都是很明确的能把Manual的东西搞明白了工作起来就有思路了,见过很多号称资深PHPer手册速查都不会,只能拼命不断的使用关键词百度或者Google

    现在公司企业里面见到的也就是MVC的框架下面用命名空间组织一下代码,Composer源不是很稳定估计国内用的公司也不是很多,有些更过分的甚至还在用着老掉牙的PHP5.2兼容的MVC框架

    至于缓存、数据库表分区、全文搜索还有队列之类的假设出来的场景没有任何实际意义,当你遇到实际情况的时候才会发现增删改查到底难在哪里。如同你给一个访问量不大特别注重前端的以展示为主的网站把ORM设计成了读写分离的,最后才发现除了增加系统维护的难度之外没有任何帮助,有那功夫还不如考虑把CSS/JS合并了并加上版本号呢。

    找工作呢一般都会考你一点点小算法了,像我这种文科生呢当别人一问我链表什么的100%就跪了,所以感觉我所在的企业都不是最优选择。
    g8287694
        25
    g8287694  
       2015-05-22 15:01:02 +08:00
    和LZ一样
    不知道怎么深入 都说高PV处理之类的 但关键是 自己学习 遇不到这种情况啊
    blue7wings
        26
    blue7wings  
       2015-05-22 16:48:10 +08:00
    同楼主情况,我还是觉得多写多看多思考,一千个人可能给你一千个不同的指导方案,仅仅看和学是不够的,需要在实践中发现自身的问题,然后去补足它。一起加油。。。
    MrEggNoodle
        27
    MrEggNoodle  
       2015-05-22 16:56:54 +08:00
    我是Py方向的,不过,曾经我也是你这种状态,后来,我改成了,自己找项目做,学学SAE怎么搭PHP,然后自己找个方向做项目。在做的过程中你就会知道你要学什么了。理论看太多,没有实践都是空的,编程虽说是脑力活,但是更是一种匠活,说多无益,听多会忘会迷惘,所以请动手哈!
    Actrace
        28
    Actrace  
       2015-05-22 17:01:08 +08:00   ❤️ 1
    php的核心目标是快速解决问题,因此你完全没必要学什么底层,那些口口声声说要学底层的(所谓的深入)估计也没几个真正能达到那么深的层次。
    作为一个合格的phper,你需要及时了解这门快速更新的编程语言的新特性,并能大概知晓其运用场景(是的,你不需要精通所有的特性,因为这不可能)在需要的时候及时切入进来。因为这些新特性固然会有其作用场景,但是切勿滥用,不要为了用而用。
    我觉得jquery的设计理念同样适合phper: write less ,do more.

    如果是为了探寻程序原理和更伟大的目标,那么请老老实实学好汇编和C。
    mhycy
        29
    mhycy  
       2015-05-22 17:04:46 +08:00
    @Actrace 支持...
    工具终归是工具,用得溜才是正道...
    kyyych
        30
    kyyych  
       2015-05-22 20:43:38 +08:00
    研究开源框架, 维护别人的项目
    susanDao
        31
    susanDao  
       2015-05-23 08:08:15 +08:00 via iPhone
    找个地方实习吧
    hellovigoss
        32
    hellovigoss  
       2015-05-23 22:46:10 +08:00
    从来没有觉得一个称职的phper仅仅只是一个phper
    mingyun
        33
    mingyun  
       2015-05-24 09:53:23 +08:00
    赶紧先上手项目吧
    miaotaizi
        34
    miaotaizi  
       2015-05-26 23:46:11 +08:00   ❤️ 1
    刚想提问跟楼主一样的问题,就看到这个帖子了.
    我觉得我比楼主更糟...
    年纪快上30 了才学了PHP 作为编程入门, 想好好的学一下编程却不知道从何下手, 现在都感觉没信心了.
    楼主加油, 你还年轻!
    maiziedu
        35
    maiziedu  
       2015-05-29 16:47:41 +08:00
    根据题主的描述,题主也是一个有一定PHP经验的人,学php的话,应该就更轻松,现在题主学的东西都比较杂且不深入,建议题主针对性的系统学习,推荐php开发实战教程: http://www.maiziedu.com/course/14/ 这个教程是课程模块化了的教程,分了基础阶段、进阶、高级阶段等,每个阶段要学的课程也有列出了
    Caratpine
        36
    Caratpine  
    OP
       2015-05-29 23:50:32 +08:00
    @miaotaizi 一起加油~ 可以一起交流学习
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2685 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:52 · PVG 20:52 · LAX 04:52 · JFK 07:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.