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

我一直在使用PHP多年,并对这门语言有了很好的把握,创造出了许多先进的和不太先进的系统,这些系统运行良好。

我遇到的问题是,只有当我发现我以前从未学过的东西需要的时候,才会学习。 这使我查找解决scheme和其他代码来处理这个问题,所以我将学习一个我以前从未见过的新function或结构。 正是通过这种方式,我学到了许多更好的技术(例如亚马逊,谷歌或其他大公司的学习课程)。

这个问题的主要问题是如果你不知道它存在,就不能学习。 例如,我花了好几个月的时间来学习empty()函数,我只是使用strlen()来检查string长度来检查空值。

我现在正在build立越来越大的系统,我已经开始阅读highscalability.com之类的博客,并且正在研究MySQL复制和服务器数据以进行扩展。 我知道你的代码结构对于使整个系统工作非常重要。

在阅读了最近关于reddit结构的博客之后,这让我质疑是否有一些标准或“接受的系统”。

我研究过框架(我曾经使用过Kohana,我后悔了,但是决定PHP框架不适合我),我更喜欢我自己的函数库,而不是框架。

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

我能看到的潜在好处是:

  • 阅读博客
  • 阅读教程
  • 和其他人一起工作
  • 读一本书

作为一个非常优秀的系统开发人员来说,“达到一个新的水平”的最好方法是什么?

每个想成为PHP程序员的人,总是只有第一个字,完全忽略了第二个字。

虽然“编程”比“PHP”更重要,但作为一名PHP专业人员,首先应该是程序员。

所以,我会为最后一个投票 – 读书。 不是在PHP上,而是在编程上。 格雷迪·布奇 ( Grady Booch ), 马丁·福勒 ( Martin Fowler ),甚至是老唐纳德·克努斯 ( Donald Knuth )的。
看看其他一些语言,比如Java或者Python,也不错。 不要切换到他们,而是向他们学习。

我更喜欢我自己的函数库,而不是有一个框架

你把一个“函数库”和“一个框架”称为不同的概念(好!),为什么不尝试一下,把这个函数库变成一个框架呢? 请注意,这是学习的好方法,但不是掌握适销对路的最佳方法;)

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

“必备”function

几乎所有框架都具有某些function,这是有原因的。 研究它们; 找出他们为什么在场以及他们的变化是什么; select你希望在你的框架中包含哪些实现。

  • 面向对象(这是关键为什么你会写一个框架,而不是只使用你的函数库)
  • 使用模式(检查并开始问自己为什么这么多的框架使用应用程序控制器而不是前端控制器 …是否有一些使用页面控制器的平台?
  • 基本的MVC结构
  • 清理url

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

  • 如果你喜欢Ruby,也许你想要在模块中join类的方法 ?
  • 如果你喜欢Asp.NET,也许你想尝试在PHP环境中创build服务器控件 ?
  • 打乱宽恕是 HTML 的默认 ? 为什么不validation输出服务器端

我不知道你有什么兴趣,所以我会停下来。

发布它!

这一部分是重要的,因为内森是正确的 :你的工作必须被其他人看到,挑战,批判和纠正。 不要把这盏灯放在蒲式耳下 – 它需要被看见; 把它放在谷歌代码或sourceforge什么的,如果人们打算仔细看待它,你需要认真对待它; 你需要维护unit testing和回归testing; 你需要使用版本控制; 您需要对每个文件顶部的大/* header comment */进行评论,并为每个类和其成员提供有用的文档生成注释。

概要

如果你这样做,你可以学习(在高层次)关于其他平台。 作为一名PHP开发人员,你绝对可以“定格40人”。 你可以学习unit testing; 关于回归testing。 您可以有效地了解文档。

保证你的框架会出来“特殊的,可能很烂”,但是你可以从写作中学到很多东西。 请记住,框架不是一个产品, 这是一个种类的旅程。

  1. 查看PHP和PHP的预定义接口的 隐藏function
  2. 学习不同的语言。 学习比PHP更陡峭的学习曲线的语言。 任何时候我指出PHP的其他语言的优势,我被指责PHP抨击,主要是显然没有真正掌握另一种高级语言的人。 但我会冒这个险。 我build议Ruby,Python,Pearl和haXe (作为严格types的对应)。 一旦你做到了,尝试将你的新知识应用到PHP。 或者只是远离PHP,万一你不想回去(我认为这不可能发生)。
  3. 学会处理批评。 你对Nathan的post的反应显然很清楚你还不能处理它。 他是绝对正确的。
    • 现在看看我的第一个PHP框架,我不得不说这是相当糟糕的。 当时我认为它很棒(而且还比我已经见过的很多生产代码要好)。 不过,它有很多缺陷。 除非你是一个完全的天才,否则几年之后,如果你回顾他们(假设你在发展),你的第一个框架将会非常糟糕。
    • 实际上,随着时间的推移,你创build的任何框架都会变得更糟(假设你不停止进化)。 出于这个原因,你可能会使用可用的框架,并更多地关注应用程序开发。 如果您使用的框架有限制,请考虑贡献,而不要编写另一个PHP框架。
    • select编写自己的框架(不仅仅是为了好玩/学习,而是用于生产部署)的时间点是当你的需求超过其他框架提供的时候,而不是当你不喜欢与其合作的想法时。 这是我自己做的一个常见的错误。 但现在我可以说,我从中学到了东西。 但是,如果您征求意见(我不幸在当时不这么做),您将会得到类似这样的答案。
    • 你从你自己写的代码中学到很多东西。 你不仅可以获得其他人思考过的框架所提倡的概念,还可以学习高效,灵活,能够在团队中工作并完成工作(同时获得相当好的结果)。
    • 我想你不能认为你比每个PHP开源项目的团队都好,否则你会问。 克服顽固的本能需求,重新发明任何年轻的开发者,并成长起来,解决人们尚未解决的问题。
  4. 学习,组件库和框架有什么不同? 既然你认为你可以用“你自己的函数库”replace一个框架,那么你可能还没有明白,框架的重点是什么。 看看依赖倒置 , 控制和dependency injection的 倒置 。
  5. 了解软件devise。 看看像SOLID和GRASP这样的OO原则。
  6. 尝试不同的范例。 AOP,函数式编程。 使用更强的面向对象的语言(如Ruby,Objective-C或Smalltalk)来增强面向对象的技能。
  7. 看一下PHP框架,比如Flow3,Symfony,PHP点燃器和CakePHP。 我已经指出了为什么我认为你应该这样做。
  8. 正如在我的另一个评论中指出的,你应该考虑其他存储比RDBMs。 SQL和OOP确实不能很好地结合在一起。 看看OODBMS,不同的数据库抽象层,键值存储,文档存储(如CouchDB和MongoDB),将caching服务器分配为memcache等。

这里有一些想法:

  • 尝试不同的事情。 学习一门新的语言。 有些时候在学习其他语言的过程中,实际上使你们都更好。

  • 贡献一个开源项目。

  • 高扩展性和PHP / MySQL不是朋友。 今天有一些技术正在为此而构build。 node.js和Redis来命名一对夫妇。

  • 在SO中回答问题。 其他人的问题可以让你在盒子外面思考,你可以改进尝试帮助的过程,而且你也可以对别人做一些好事。

  • [如果我想起刚刚喝了咖啡的东西,就试着在这里补充一下:D]

学习以不同的方式去做你已经知道的事情。 例子:

  • 用不同的语言
  • 在不同的平台上
  • 并行/分布式
  • 通过一个框架(是的,你决定他们“不适合你” – 也许尝试一个不同的,他们有时是非常不同的)

也许你应该重新研究一下框架,我build议看一下Zend框架,因为它更像是一个你可以使用的组件库,而不是真的强加一个你必须遵循的刚性结构(比如一些其他的框架),虽然它确实表明(相当理智的imho)项目布局。 一个好的起点将是幸存下来的深渊 。

你还没有提到的东西,这可能是有用的知道(特别是在大型项目):

  • OOP与PHP(devise模式)
  • unit testing( PHPUnit , SimpleTest ,…)
  • ORM( 推进 , 学说 )

简单: 做吧 。 需要会让你学习。 find一种方式来参与越来越先进的项目,无论是商业还是开源。 没有别的方法可以真正学到东西。

我会join讨论区,并试图解决其他民族问题。 有时候有相当具有挑战性的问题迫使你做一些研究。 如果你不能回答,你可以等待一个能够学习的人。

至于框架,向他们学习。 我也自己推出,因为大部分的框架可能会比较慢。 虽然对于大多数网站来说足够快。

我也build议看看Facebook的PHP库。 他们在那里做一些有趣的事情。

你所能做的最好的是买一本关于高效algorithm的书。 在每个计算机科学的学生生活中,都有一段时间需要学习。 这里讨论/解决的问题几乎是任何你可能遇到的现实世界问题的抽象。

除了阅读关于别人如何做的博客是完全正确的,因为它可以帮助你理解如何实际使用(甚至实现)高效algorithm的原理。

问候。

与其他开发人员合作可以说是不够的。 我特别了解3位开发人员,2我每天都在一起工作,用他们的知识吹我。 我所做的一切都是要求他们的意见,并不是因为我第二次猜测自己的想法,而是更多地想听到别人的想法,尤其是我作为开发者所尊重的人。 我从这些人身上学到的东西比任何其他方式都多。 如果您没有其他高级开发人员的访问权限,那么肯定会在SO或其他开发者论坛上发帖,询问人们的意见,询问他们如何处理特定的项目/问题。 一般情况下,你不会学习新的技术/方法/函数,除非你看到它们被使用(如果你不知道它是否存在,你怎么知道该找什么?)

另外,如前所述,参与OS应用程序。 去sourceforge找一个需要开发者的项目。 或者下载一个应用程序,并尝试编写一个插件(我正在为Invision 3.0 atm编写一个插件,并学习一些东西。)

希望有所帮助。

阅读其他人的代码。 现在你有自己的图书馆,但是在阅读其他应用程序的源代码时,你可能会有一些启发。 然后问自己'为什么。 做博客作家,而不是读者。 另外,比语言更重视程序员。 而是看看已经解决问题的解决scheme,并尝试用自己的知识来复制它们。 祝你好运,玩得开心!

看其他程序员代码的方法绝对是学习“好”或“坏”实践的好方法。 在阅读其他代码之后,您会为良好的代码开发一种“感觉”。

我绝对推荐像Zend Framework,symfony,CakePHP或Agavi这样的框架,因为很多贡献者都会看这些代码,并不断地向“理想”解决scheme发展(当然这是永远不会达成的……);)您仍然可以开发你自己的类,而不是框架提供的决定…

有了这么长的PHP背景,你可以考虑贡献一个开源框架。 与其他开发者的讨论带给你更快的方式。

向别人展示你的代码,并要求build设性的反馈也有同样的效果。 你不知道自己有多好,除非你把自己的技能与别人进行比较。 始终以build设性的态度。 这对开源框架的贡献是一个自然的过程。 ;)

您应该使用示例,在展开示例时使用示例,以便学习如何通过使示例更加实用并提供更多function来扩展示例。

尽pipe如此,创build一些您在PHP中学到的东西是件好事。 要多练习,你应该创build类似预订系统等等。当你学习更多的PHP时,迟早你可以通过学习更多的东西来扩展,这会使你的开发变得更好。

你可以问你的公司他们是否可以支付你一个Zend PHPauthentication考试。 学习这门考试将迫使你很好地了解PHP并通过阅读大量的文档,Zend学习指南以及通过模拟考试进行培训来进行培训。 这是一种非常有效的改进方式,在简历上看起来相当不错。

“我自己的函数库”==“一个[特殊的,可能很烂的]框架”。

我build议学习Symfony,因为开发者似乎一直在努力按照“最佳”的做法去做所有的事情……但是你也可以从任何stream行的框架中学到很多东西。

不要写你自己的框架。 请。