如何进一步增加我对PHP的“高级”知识?(迅速)[关闭]


74

我从事PHP已有多年,并且对语言有很好的了解,创建了许多功能非常先进的,不太先进的系统。

我遇到的问题是,我只会在发现需要以前从未学过的东西时才学习。这使我查找解决该问题的解决方案和其他代码,因此我将学习以前从未见过的新功能或结构。通过这种方式,我学到了许多更好的技术(例如学习Amazon,Google或其他主要公司开设的课程)。

这样做的主要问题是如果您不知道某件事的存在就无法学习的概念。例如,我花了几个月的编程来学习该empty()函数,并且我只是检查了strlen()用于检查空值的字符串长度。

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

在阅读了有关reddit结构的最新博客之后,我问到那里是否存在一些标准或“可接受的系统”。

我研究了框架(我曾经使用过Kohana,对此我感到很遗憾,但是我认为PHP框架不适合我),并且我更喜欢自己的函数库而不是拥有框架。

我当前的结构是WordPress,Kohana和我自己的知识的混合体。

我认为有潜在益处的方式是:

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

成为一个非常出色的系统开发人员的最佳方法是什么?

Answers:


115

每个想成为PHP程序员的人,总是只使用第一个单词,而完全忽略第二个单词。

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

所以,我投票给最后一本书-阅读书籍。不是在PHP上,而是在一般的编程上。格雷迪·布赫Grady Booch),马丁·福勒Martin Fowler)甚至老唐纳德·克努斯Donald Knuth)的那些。
看看其他语言,例如Java或Python,也将很不错。不是切换到他们,而是向他们学习。


26
确实如此。但是,“其他语言”是什么意思?Web程序员为什么需要了解仅适用于桌面应用程序的内容?我总是感到困惑,为什么“要用一种特定的语言变得更好”的答案总是要“学习另一种语言”并得到如此多的赞誉。是提高说意大利语学习拉丁语的答案吗?有人会说“是”,但我认为花时间学习另一种您不会仅仅用来间接使其“更容易学习”另一种语言的时间是不值得的。
Lotus Notes 2010年

10
很抱歉,我有双重职务,但我无法编辑。OP专门要求高级PHP知识。也许我只是天真,但是真正在编程语言之间自由传递的唯一东西是设计模式(如果需要,可以在纯PHP中学习),算法(非常适合Web编程的情况)和一般的良好实践。我发现大部分时间都是在“学习”某种语言的过程中弄清特定的库,无论是标准库还是非标准库。唯一真正的问题是,以PHP而不是C ++或Java之类的语言开始的程序员在使用OOP时会遇到困难。
Lotus Notes 2010年

4
@Byron:第二个评论中的最后一句话与您所说的所有其他内容相反。
stagas

2
我还想补充一点,如果您使用其他语言(例如Ruby),则可能会很快考虑从PHP切换:)我和您处于同一位置,我现在正在认真考虑放弃PHP。
汤姆

22
@Byron学习英语使我对自己的母语德语更加清醒,学习日语极大地提高了我的英语水平和语法知识。学习Javascript扩展了我对函数和对象的思考,并在Haskell和Ruby中涉猎,向我展示了许多反映我的PHP技能的有趣概念。因此,我肯定会说,是的,学习其他东西可以改善您的“主要”语言。学习拉丁语肯定会增加您对大多数欧洲语言的理解。
deceze

28

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

您将“函数库”和“ a”框架称为不同的概念(很好!),为什么不花点时间把那个函数库变成框架呢?提醒您,这是一种学习的好方法,但不是掌握适销对路的技能的最佳方法;)

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

“必备”功能

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

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

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

发布吧!

这部分很重要,因为内森(Nathan)是对的:您的工作必须被其他人看到,挑战,批评和纠正。不要把那盏灯放在蒲式耳下-它必须被看见;将其放在Google代码或sourceforge等上,如果人们要认真对待它,则需要认真对待;您需要维护单元测试和回归测试;您需要使用版本控制;您需要对它进行很好的评论/* header comment */,每个文件的顶部都有的注释,并为每个类及其成员提供了有用的文档生成注释。

概要

如果完成所有这些操作,则可以(从高层次上)了解其他平台。您绝对可以作为PHP开发人员“ ding 40”。您可以了解单元测试;关于回归测试。您可以了解有效记录文档的信息。

保证您的框架会“特质化,并且可能很烂”,但是您可以从编写它中学到很多东西。请记住,该框架不是产品。这是一段旅程。


仅出于争论的目的;)
理查德·JP·勒·关(Richard JP Le Guen

哈,谢谢理查德。不幸的是,现在我们人手不足,无法同时处理3-4个主要系统,因此我没有时间来构建实际的框架。虽然我可以清楚地看到这样做的优点和理由,但我也同意不要重新发明轮子。我看到自己而不是自己动手,会更快地挖掘另一个框架并找到他们的优点和缺点。
凯里·琼斯

@Nathan-np ...感谢您专注于道具而不是我的-1:S
Richard JP Le Guen 2010年

@RJPLG-嗯。这里周围人山人海!关于Perl问题的评论者是比较经典的:P
Nathan 2010年

我在很多方面都同意这一点。通过尝试和失败,您会变得更好。期。
FredTheWebGuy 2012年

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

11

这里有一些想法:

  • 尝试不同的事情。学习一门新的语言。有时在学习其他语言的过程中,实际上会使您在两种语言上都变得更好。

  • 贡献一个开源项目。

  • 高扩展性和PHP / MySQL不是朋友。今天有专门为此目的而构建的技术。node.js和Redis仅举几例。

  • 用SO回答问题。他人的问题会使您跳出思路,在尝试帮助的过程中有所改进,并且对某人也做得很好。

  • [如果我想起刚喝咖啡的其他事情,将尝试在此处添加:D]


10
我不同意高可扩展性,PHP / MySQL不是朋友,例如Adobe使用MySQL而Facebook使用PHP。除非您是将它们组合在一起?但是我仍然对此表示怀疑。其他一切都很棒
Kerry Jones 2010年

1
@Kerry:您的意思是?美国海军使用Windows2000。:D PHP的性能不佳,这就是Facebook在嘻哈上工作的原因:developers.facebook.com/blog/post/358。关键是,购买新服务器然后为更好的平台重写应用程序总是比较便宜。但是,如果您是从头开始编写应用程序,则应该花时间选择一个好的平台。SQL来自1974年,而Adobe的AS3只是90年代的Java模拟。尝试开放并使用新技术和方法。尤其是当您想变得优秀时。
back2dos

11
很难从用户名为@ back2dos的人那里获得面值建议:p
Kzqai 2010年

2
@ back2dos-但是海军的主要领域不是计算机。Facebook,是。他们拥有超过60,000台服务器,并且已多次重写其代码,他们可以选择从PHP / MySQL切换,但没有。是的,他们使用HipHop,但是使用PHP编写。这并不意味着HipHop无法从一开始就实现。
凯里·琼斯

3
@ back2dos-我没有读过这篇文章,因为我读过许多其他文章。我曾经说过Facebook比海军拥有更多的计算机吗?不,是在我嘴里说出文字的好方法。另外,如果您要提出可笑的指责和主张(例如PHP和领航员...领航员不可能在0.0001秒内做出反应,而PHP可以轻松地进行计算),我也看到大量缺乏参考资料并大量燃烧。Yahoo!,YouTube和Wikipedia均使用PHP。这些是网络上流量最大的网站。
凯里·琼斯

3

学习以其他方式做您已经知道的事情。例子:

  • 用另一种语言
  • 在不同的平台上
  • 并行/分布式
  • 通过一个框架(是的,您认为它们“不适合您”-也许尝试不同的框架,有时它们彼此之间会有很大的不同)

3

也许您应该再次研究框架,我建议您看一下Zend框架,因为它更像是一个组件库,您可以根据需要使用它,并且实际上并没有施加必须遵循的刚性结构(例如其他一些框架也可以做到),尽管它确实建议了(相当明智的恕我直言)项目布局。一个良好的起点是生存深处

您尚未提到的事情,可能会有助于您了解(尤其是在较大的项目中):


Zend会降低速度吗?大多数框架都会大幅降低它(我查看的是基准测试,甚至那些吹嘘速度的测试相比,没有框架的测试都要慢得多)
Kerry Jones 2010年

如果使用自动加载,则可以,这会降低速度。如果使用很多不同的组件,则可以,这会降低速度。但是,灵活性(以及标准化,不仅对您有利,而且对未来的员工/同事也有利),您所获得的收益超过了使用框架恕我直言的缺点。当然,这是您必须自己决定的事情。如果需要,您可以轻松地缓存输出块。但是,关于Zend的好处是,您只能使用应用程序中想要/需要的组件,而不是整个enchilada,然后将其与您认为合适的其他代码混合。
wimvds 2010年

2
顺便说一句,如果您担心速度,使用操作码缓存(XCache,Zend Optimizer等)可以大大提高脚本的速度(尽管您最终将使用更多的资源-内存/磁盘)...
wimvds


3

我将加入讨论委员会,并尝试解决其他人的问题。有时会有一些极具挑战性的问题迫使您进行一些研究。如果您无法回答,则可以等待有能力的人学习。

至于框架,请向他们学习。我也自己动手,因为那里的大多数框架都可能相当慢。尽管对于大多数网站来说足够快。

我还建议您查看Facebook的PHP库。他们在那里做一些有趣的事情。


谢谢你的最后一句话。
凯里·琼斯

2

最好的办法是买一本关于 有效算法。在每位计算机科学专业学生的生活中,都有一段时间必须学习这些知识。讨论/解决的问题几乎是您可能会遇到的任何现实问题的抽象。

除此之外,阅读有关他人如何做的博客非常好,因为它可以帮助您了解如何实际使用(甚至实施)高效算法的原理。

问候。


你能推荐一本好书吗?
Shyam 2010年

2

与其他开发人员合作还不够。我认识3位开发人员,其中2位是我每天与之共事的开发人员,他们使我不知所措。我对他们所做的每一件事都征求他们的意见,不是因为我第二次猜测了自己的想法,而是因为我想听听其他想法,尤其是听取那些我尊重开发人员的想法。我从这些人那里学到的东西比其他任何方法都多。如果您没有其他高级开发人员的访问权限,则一定要在SO或其他开发人员论坛上发布并征询人们的意见,询问人们如何处理特定的项目/问题。除非您看到新技术/方法/功能的使用,否则您通常不会学习它们(如果不知道它们的存在,怎么知道要查找的内容?)

另外,如前所述,请参加OS应用程序。转到sourceforge并找到需要开发人员的项目。或下载一个应用程序并尝试为其编写一个插件(我正在为Invision 3.0 atm编写一个插件并学习一些知识。)

希望能有所帮助。


1

阅读其他人的代码。您现在拥有自己的库,但是在阅读其他应用程序的源代码时可能会有所启发。然后问问自己为什么。成为博客作者,而不是读者。另外,除了语言以外,还应该更多地强调程序员。而是查看已经解决问题的解决方案,并尝试以您自己的知识来复制它们。祝你好运,玩得开心!


1
对于大多数人来说,其他人不理解的是我的函数库基于Kohana和WordPress,很少是我自己的函数。我已经遍历了WordPress的页面和结构的几乎所有页面,所以,是的,我同意您的意见:)
Kerry Jones

1
我和自己的处境一直相同(我想大多数程序员都曾经经历过,除了他们的大脑内有500磅的说明书)。通过阅读CodeIgniter来源并更深入地了解正在发生的事情,我发现自己变得“更好”。特别是因为它以性能为目标。良好的判断力来自经验,经验来自编写代码和阅读他人(就像读一本书并理解两句之间的幽默一样)。
Shyam 2010年

1

查看其他程序员代码的方法绝对是学习“好”或“坏”实践的好方法。阅读其他代码后,您会对良好的代码产生“感觉”。

我绝对推荐使用Zend Framework,symfony,CakePHP或Agavi之类的框架,因为许多贡献者会着眼于该代码,并不断朝着“理想”的解决方案开发它们(当然,永远不会实现...);)您仍然可以开发自己的类而不是框架提供的类的决定...

拥有如此长的PHP背景,您可以考虑为开源框架做出贡献。与其他开发人员的讨论使您更快地前进。

向他人展示您的代码并寻求建设性反馈具有相同的效果。在与他人进行基准测试之前,您永远都不知道自己有多出色。总是以建设性的方式。为开源框架做出贡献时,这将是一个自然的过程。;)


0

您应该使用示例,并在扩展示例时使用它们,因此您将学习如何通过增强示例功能和提供更多功能来扩展示例。

虽然,创建到目前为止在PHP中学到的东西还是不错的。要练习更多,您应该创建诸如预订系统之类的东西。早晚使用PHP进行学习时,您将能够通过学习更多知识来扩展更多内容,这将使您的开发变得更好。


0

您可以询问您的公司是否可以付给您Zend PHP认证考试。学习该考试将使您充分了解PHP,并通过阅读大量文档,Zend学习指南和模拟考试训练来进行培训。这是一种非常有效的改进方法,并且在简历上看起来还不错。


那不是比语言更针对框架吗?
Shyam

2
我说的是PHP认证,而不是ZF认证。我通过了它,关于框架没有一个单一的问题。
greg0ire 2010年

-11

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

我建议学习 Symfony因为开发人员似乎一直在努力按照“最佳”实践做所有事情……但是您可能可以从任何流行的框架中学到很多东西。

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


1
在您知道它是侮辱性和特质性之前,先判断一下我做了什么。
凯里·琼斯2010年

2
您的代码(或构想)被其他人看到,质疑,批评和纠正的次数越少,它们如您想象的那样出色的可能性就越小。
内森2010年

6
真是愚蠢的答案。编写自己的框架没有错。我和一个朋友一起做这件事仅仅是因为我们想要并且有时间闲暇。现在,我们为我们的应用程序使用自己的框架,并且可以在其中快速开发。并不是说使用另一个固件有什么问题,只是我们想创建自己的固件。所以我们做到了。作为一名开发人员,我个人也从中得到了长足发展,这使我对MVC有了更多的了解。
基督教徒

3
如果没有人“编写自己的框架”,那么我们将没有任何框架-也就是说,您可能不应该开始使用,除非您已经获得了将其他几种框架用于更多应用程序的丰富经验
HorusKol,2010年

2
我真的不敢相信这些评论是多么愚蠢。这是正确的答案。问题是“如何进一步提高我对PHP的“高级”知识?正确的答案是“通过观察如何在采用最佳实践的成熟框架中进行学习来进行学习”。
calumbrodie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.