如何进一步提高我对PHP的"高级"知识?(很快)

Ker*_*nes 74 php structure system-design

我已经使用PHP多年,并且非常好地掌握了语言,创建了许多先进且不那么先进的系统,这些系统运行良好.

我遇到的问题是,当我发现需要以前没有学到的东西时,我才会学习.这使我查找处理问题的解决方案和其他代码,因此我将学习一个我以前从未见过的新功能或结构.通过这种方式,我学到了许多更好的技巧(例如学习亚马逊,谷歌或其他大公司推出的课程).

这个问题的主要问题是如果你不知道它存在的话就无法学到东西的概念.例如,我花了几个月的时间来学习empty()函数,我只是检查字符串长度strlen()来检查空值.

我现在正在构建越来越大的系统,我开始阅读像highscalability.com这样的博客,并一直在研究MySQL复制和服务器数据以进行扩展.我知道代码结构对于使完整系统工作非常重要.

在阅读了最近关于reddit结构的博客后,它让我怀疑是否有一些标准或"接受的系统".

我已经研究过框架(我使用了Kohana,我后悔了,但我认为PHP框架不适合我)而且我更喜欢自己的函数库而不是框架.

我目前的结构是WordPress,Kohana和我自己的知识之间的混合.

我认为可能有益的方法是:

  • 阅读博客
  • 阅读教程
  • 与他人合作
  • 读一本书

作为一个非常优秀的系统开发人员,"达到更高水平"的最佳方式是什么?

You*_*nse 115

每个想成为PHP程序员的人,总是只接受第一个单词并完全忽略第二个单词.

虽然"编程"比"PHP"更重要,但要成为一名PHP专业人员,首先应该是程序员.

所以,我会投票给最后一本 - 读书.不是PHP,而是一般的编程.Grady Booch,Martin Fowler甚至是老唐纳德Knuth的.
看一下其他语言,比如Java或Python,也会很高兴.不要切换到它们,而是向它们学习.

  • 确实如此.但你用"其他语言"是什么意思?为什么Web程序员需要了解仅针对桌面应用程序的内容?它总是让我感到困惑,为什么"在特定语言中变得更好"的答案始终是"学习另一种语言"并接受如此多的赞成.是否能够更好地讲意大利语学习拉丁语?有些人会说是,但在我看来,不值得花时间学习另一种语言,你不会只是间接地让它"更容易学习"另一种语言. (26认同)
  • @Byron学习英语使我更加关注我的母语德语,学习日语显着提高了我的英语水平和整体语法知识.学习Javascript扩展了我对函数和对象的思考,并且在Haskell和Ruby中涉及到我向我展示了许多反映我的PHP技能的有趣概念.所以我肯定会说是的,学习别的东西可以改善你的"主要"语言.学习拉丁语肯定会增加您对大多数欧洲语言的理解. (22认同)
  • 抱歉双帖,但我无法编辑.OP特别要求获得高级PHP知识.也许我只是天真,但你真正在编程语言之间自由转移的东西是设计模式(如果你愿意,你可以用纯PHP学习),算法(非常适合网络编程)和一般的良好实践.我发现大多数时候"学习"一种语言用于计算特定的库,无论是否标准.唯一真正的问题是,使用PHP而不是像C++或Java这样的语言开始的程序员使用OOP会更加困难. (10认同)
  • @Byron:你的第二条评论中的最后一句与你所说的其余部分相反. (4认同)
  • 我还想补充一点,如果你看一些其他语言,比如Ruby,你可能会很快考虑从PHP切换:)我和你在同一个地方,我现在正在认真考虑放弃PHP. (2认同)

Ric*_*uen 28

我更喜欢自己的函数库而不是框架

你将'函数库'和'a'框架'称为不同的概念(好!),那么为什么不尝试一下这个函数库并将函数库转换成框架呢?请注意,这是学习的好方法,但不是拥有适销技能的最佳方式;)

这也是学习错误的好方法,所以在你开始之前你必须做一些研究.

"必备"功能

几乎所有框架都有某些功能,这是有原因的.研究它们; 找出他们为什么存在以及他们的变化是什么; 选择您希望在框架中包含哪些实现.

您想要了解和模拟的非PHP平台的功能

我不知道你有什么兴趣所以我会停在那里.

发布吧!

这部分很重要,因为内森是对的:你的工作必须被其他人看到,挑战,批评和纠正.不要把那盏灯放在蒲式耳下面 - 需要看到它; 把它放在谷歌代码或sourceforge或其他东西上,如果人们打算认真看待它,你需要认真对待它; 你需要维护单元测试和回归测试; 你需要使用版本控制; 你需要对它进行评论/* header comment */,每个文件的顶部都有一个大的,并且每个类及其成员都有有用的doc生成注释.

摘要

如果你做了这一切,你可以(在很高的层次上)学习其他平台.作为PHP开发人员,你绝对可以"ding 40".您可以了解单元测试; 关于回归测试.您可以了解有效的文档记录.

保证你的框架会出现"特殊而且可能很糟糕",但你可以从写作中学到很多东西.请记住,框架不是产品; 这是一个旅程...各种各样.


bac*_*dos 18

  1. 查看PHPPHP预定义接口的隐藏功能
  2. 学习不同的语言.学习比PHP学习曲线更陡峭的语言.任何时候我指出其他语言优于PHP的优点,我被指责为PHP抨击,大多数人显然从来没有真正掌握过另一种高级语言.但是我要承担风险.我建议使用Ruby,Python,Pearl和haXe(作为严格类型的对应物).完成后,尝试将新知识应用于PHP.或者只是远离PHP,以防你不想回去(我认为不太可能发生).
  3. 学会处理批评.你对Nathan的帖子的反应非常明显,你还不能处理它.他是绝对正确的.
    • 现在看看我的第一个PHP框架,我不得不说它非常糟糕.当时我认为它很棒(它仍然比我已经看到的许多生产代码更好).它仍有许多缺陷.除非你是一个完全的天才,否则你的第一个框架看起来会非常糟糕,如果你在几年后回顾它们(假设你进化了).
    • 实际上,随着时间的推移,你将创建的任何框架都会变得更糟(假设你不停止进化).因此,您可以使用可用的框架,并将更多精力放在应用程序开发上.如果您使用的框架有局限性,请考虑提供而不是编写另一个PHP框架.
    • 选择编写自己的框架(不仅仅是为了娱乐/学习,而是用于生产部署)的时间点是,当您的要求超出其他框架提供的要求时,而不是当您不喜欢使用框架的想法时.这是一个常见的错误,我自己做了.但现在我可以说,我从中吸取了教训.但是如果你征求意见(我很遗憾当时没有这样做),你会得到这样的答案.
    • 通过使用自己没有编写的代码,您可以学到很多东西.您不仅会接受其他人经过深思熟虑的框架所倡导的概念,而且还学会了高效,灵活,能够在团队中工作并完成工作(同时获得相当不错的结果).
    • 我想你不能认为你比PHP开源项目的每个团队都要好,否则你会问.克服任何年轻开发人员重新发明轮子的顽固本能需求,并逐渐解决尚未解决的问题.
  4. 了解组件库和框架之间的区别.既然您认为可以用"自己的函数库"替换框架,那么您可能还没有理解框架的重点.看看依赖倒置,控制反转依赖注入.
  5. 了解软件设计.看看像SOLIDGRASP这样的OO原则.
  6. 尝试不同的范例.AOP,函数式编程.使用具有更强面向对象的语言(如Ruby,Objective-C或Smalltalk)来增强您的OO技能.
  7. 看看PHP框架,如Flow3,Symfony,PHP点火器和CakePHP.我已经指出了为什么我认为你应该这样做.
  8. 正如我的另一个评论所指出的,您应该考虑除RDBM之外的其他存储.SQL和OOP真的不能很好地结合在一起.查看OODBMS,不同的数据库抽象层,键值存储,文档存储(如CouchDB和MongoDB),将缓存服务器分发为内存缓存等.


sta*_*gas 11

以下是一些想法:

  • 尝试不同的东西.学习一门新的语言.有时候在学习其他语言的过程中,实际上会让你更好.

  • 贡献一个开源项目.

  • 高可扩展性和PHP/MySQL不是朋友.今天有些技术专门为此而建.node.js和Redis命名一对.

  • 在SO中回答问题.其他人的问题可以让你在盒子外面思考,并且你在尝试帮助的过程中有所改进,而且你也可以为某人做点好事.

  • [如果我想到其他任何我刚刚醒来喝咖啡的话,会尝试添加这里:D]

  • 很难从用户名为@ back2dos:p的人那里获得面值 (11认同)
  • 我不同意高可扩展性,PHP/MySQL不是朋友,例如,Adobe使用MySQL而Facebook使用PHP.除非你的意思是将它们组合在一起?但我仍然怀疑.其他一切都很棒 (10认同)
  • @ back2dos - 我没看过那篇文章,因为我读过很多其他文章.我曾经说过Facebook有比海军更多的电脑吗?不,把话放在嘴里的好方法.此外,如果您要做出荒谬的指责和声明(例如PHP和飞行员......飞行员无法在0.0001秒内做出反应,PHP可以很容易地进行计算),我也看到了很多参考文献还有很多火红的.雅虎,YouTube和维基百科都使用PHP.这些是网上流量最大的网站. (3认同)
  • @ back2dos - 但海军的主要区域不是电脑.Facebook,是.他们拥有超过60,000台服务器,并且已经多次重写代码,他们可以选择从PHP/MySQL切换,但他们没有.是的,他们使用HipHop,但他们用PHP编写.这并不意味着HipHop从一开始就无法实现. (2认同)