从 PHP 到 Java。有什么建议吗? [关闭]

2024-01-07

过去 3 年我一直在使用 PHP 进行 Web 应用程序开发。我现在正准备尝试一下 Java。我最后一次使用该语言是在近 8 年前,主要是为了学术目的。

我相当熟悉 PHP 的对象模型(版本 5),并且我几乎一直在 OO 中进行编码。我现在想传承这些经验并用它来用 Java 进行开发。

我来自哪里:

  • Linux作为桌面和服务器
  • Vim/gVim + 插件作为编辑器
  • MySql 数据库
  • 阿帕奇 httpd
  • 使用过很多 PHP 框架,Zend+Doctrine 是我最常用的

到目前为止,我关于转向 Java 的收获是:

  • 我需要一个 IDE:IntellijIDEA、NetBeans 或 Eclipse
  • 我需要选择一个开发框架。一些经常出现的名称:Spring MVC、stripes、wicket。

现在我需要一些见解来帮助使这一过渡更加顺利。但从人们谈论它的方式来看,Java 似乎是一个全新的野兽,拥有自己的生态系统。听起来好像迁移到 Ruby 或 Python 实际上会更容易,这很奇怪,因为当我看到它时,Java 在概念上似乎最接近 PHP,尽管更严格且预编译。

尽管这听起来很奇怪,但很少有人公开记录他们的此类举动的经历。我在谷歌、亚马逊和 stackoverflow 上搜索了类似的问题,结果就如愿以偿了。我简直不敢相信,如果我想作为一名 Java Web 开发人员快速提高工作效率,我需要像新手一样开始。

欢迎任何人做出回应,但我认为在两种语言上都有一些宝贵经验的人会最丰富这个讨论。

  • 是什么帮助您快速掌握 Java 知识?
  • 哪些概念在 Java 中无处不在而在 PHP 中却没有,反之亦然?
  • PHP 开发人员转向 Java 时遇到的一些问题。
  • 过了多久您才感觉到转变已经完成?

我不会尝试在学习语言的同时学习 IDE。更简单的过渡是坚持使用 shell 和习惯的文本编辑器,并使用以下 shell 友好的工具:

  • ant,用于组织项目、运行自动化测试套件、增量编译
  • 豆壳 http://www.beanshell.org/对于交互式测试,快速尝试
  • 一个快速技巧:javap来自命令行将为标准库中的任何类提供方法签名。如同php -r但由于 Java 是类型化的,因​​此提供了更多信息。

Java 的在线文档精确、专业,并且语气和格式一致。与 PHP 中的所有函数都位于同一个命名空间中不同,Java 中的标准库是类层次结构。您必须熟悉该标准库,这意味着了解层级+职责: 例如你必须知道java.util.List是一个子接口java.util.Collection添加了有序条目的概念。有了这些信息,在 google 上搜索 java.util.List 将带您进入该类的 Javadoc,Javadoc 将告诉您确切的方法签名并将您链接到一系列具体实现。

一些杂项区别:

  • 字符串是序列人物而不是字节序列。绝对是正确的做法。
  • 系统生产和消费streams(字节或字符)而不是字节缓冲区。例如,如果您想在 PHP 中过滤输出,标准做法是向 ob_get_contents 请求字节缓冲区,然后转换整个缓冲区。在 Java 中,您可以向 servlet 添加一个过滤器,一次将输出转换为一个字节或一个字符。最初使用它有点令人印象深刻,但当你习惯它时,它会更简单,更像乐高 - 你的流处理器不必知道事物从哪里来以及它们去哪里。
  • 几乎所有有用的东西都是接口,创建接口的实例可能很棘手、不标准化,而且并不总是有详细的文档记录。在 PHP 中,您可以使用 XML 启动并运行new DOMDocument()。在爪哇,org.w3c.dom.Document是一个接口,所以 new() 不起作用。 Javadoc 对于接口实例一旦存在后的行为方式非常精确,但是当您试图找出对象实际上是如何诞生的时,它可能会显得相当腼腆和正经。很多时候,您必须寻找教程和代码示例,并复制粘贴一段为您提供 DOMDocument 实例的样板或java.sql.Connection管他呢。像 Spring 这样的框架流行的原因之一是它们分离出了丑陋的对象创建代码,并向您展示了一个接口实现神奇地存在的世界。

我实际上转向了相反的方向。我发现 Java 在一家大公司中工作得很好,您可能正在开发一个组件,然后将其交给其他人,后者将该组件集成到一个更大的系统中,然后将其打包并交给一个单独的运营团队 - 这就是所有这些间接性和可配置性(FactoryBuilderFactory类型抽象、web.xml 文件等)是有意义的并且做了一些有用的事情。在一家小公司里,程序员are对于运维人员来说,Java 的工作量更大。使用 Java,您必须习惯一些概念,例如启动 Java 进程、监视 Java 进程以确保其保持运行、监视 Java 进程以确保它不会进入昏迷状态(虽然它还活着),但当您更新代码等时,没有响应、关闭并重新启动 Java 进程,以最小的中断。如果您有单独的运维人员,那很好,这是他们的工作,他们非常擅长。如果您是一名程序员,照顾 Java 进程可能会分散您的注意力并且很难做好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PHP 到 Java。有什么建议吗? [关闭] 的相关文章

  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • PHP 检查当前日期是在设定日期之前还是之后

    我从数据库中提取一个日期 其格式为 dd mm YYYY 我想做的是检查当前日期 如果当前日期早于数据库中的日期 则需要打印数据库日期 如果是在之后 则需要打印 继续 有人能指出我正确的方向吗 if strtotime database d
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • session_start():无法解码会话对象

    我有时在使用 CodeIgniter 时遇到以下问题 错误 2019 03 05 19 57 26 gt 严重性 警告 gt session start 无法解码会话对象 会话已被销毁 system libraries Session Se
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 张量流中的Python_io

    我在使用张量流时遇到问题 我想用TFRecordWriter 如下 with tf python io TFRecordWriter testing filename as tfrecord writer do sth 但我收到错误 Att
  • 如何求多个矩阵中对应元素的最大值?

    我有四个具有相同维度的矩阵 比方说 A 1 2 5 4 2 9 B 4 5 9 8 0 1 C 5 3 9 0 4 0 D 5 9 1 0 9 3 如何求四个矩阵中所有对应元素的最大值 在我的示例中 结果应如下所示 maxABCD 5 9
  • 如何在matlab中为条形图添加数据标签

    例如 代码 x 3 6 2 9 5 1 bar x 为此 我需要在每个栏的顶部添加数据标签 我知道我必须使用 TEXT 关键字 但我不知道如何实现它 这是一个简单的解决方案text x 3 6 2 9 5 1 bar x ylim 0 ma
  • 批量更新 Jenkins 项目的最佳方法是什么?

    我们有数百个 Jenkins 项目 大部分是从几个模板创建的 通常需要对所有项目进行相同的更改 例如今天我需要添加一个构建后步骤以在最后删除工作区 接下来 我需要更改将构建结果复制到 Nexus 存储库的共享驱动器的步骤 将此类批量更改应用
  • VSCode Intellisense 在 Javascript 代码上奇怪的自动完成

    我刚刚使用 VSCode 编写 JS 文件时遇到了一些奇怪的行为 看到我正在尝试访问hasOwnProperty 蓬松物体上的方法 VSCode 不会自动完成或建议我的代码行中的任何内容 此时我已经认为我做错了什么 并且我可能无法通过我的对
  • 使用jquery解析部分html字符串

    I use ajax 从我的服务器获取一些 HTML 页面 返回包含完整的 HTML 结果 但我只对该文档中的一个非常具体的 div 感兴趣 唯一给出的事情是我的 ajax success 函数返回一个 JSON 对象 我制作了一个 PHP
  • 如何在 Flask 中缓存大型机器学习模型?

    这是我面临的情况 我刚刚编写了一个 Flask 应用程序 人们可以输入他们想要的文本评论 我的应用程序将从我们的数据集中返回最相似的评论 所以基本上这是一个 NLP 项目 机器学习模型已经训练好了 现在的问题是该模型大约有 2 5GB 每次
  • 替换二维数组的列值中的子字符串

    我正在尝试使用str replace 删除 我的 出于value4数组数组中的元素 然而 str replace my myarray 并没有改变任何东西 Does str replace 不适用于二维数组 我的示例数据和编码尝试 arra
  • TransactionScope/SqlTransaction 超时扩展

    一旦事务开始 是否可以延长事务的超时 使用 SQL Server 超时对于 SQL Server 来说是 外部 的 因此 SQL Server 无法影响它 所以不幸的是 不
  • 如何将字典绑定到gridview?

    是否可以自动将字典绑定到 Gridview 我最接近的是 Dictionary
  • 浏览器是否跟踪活动计时器 ID?

    浏览器是否跟踪活动setInterval and setTimeout身份证 或者这完全取决于开发人员来跟踪 如果它确实跟踪它们 是否可以通过 BOM 访问 由开发人员来跟踪 您可以通过使用 setTimeout setInterval 函
  • bootstrap 3将文本内容换行在div内以进行水平对齐

    My post title here could be misleading first have a look at HTML i have currently 正如您所看到的 每一列的文本内容都会溢出到下一列 其次 它们中的每一个都不是
  • UITableViewCell 中的 UILabel 位置第一次尝试失败

    我刚刚开始接触 iOS 开发 所以我希望我能在这里获得正确的详细信息 我有一个UILabel 加载到通过 xib 创建的表格单元格中 实际上有几个标签 其中之一的长度不同 因此包装高度也不同 heightForRowAtIndexPath等
  • 为什么 jQuery UI 不隐藏具有隐藏父元素的元素?

    我一直在开发一个单页应用程序 并注意到我的下拉菜单有时在本应隐藏的情况下保持打开状态 我调查了为什么会发生这种情况 并发现如果父元素被隐藏 则使用扩展的 jQuery UI 隐藏元素hide功能毫无价值 This fiddle http j
  • 使用 rlang 创建带有双花括号 {{ 的函数(data.table 结构)

    是否可以使用 rlang 结构来执行函数data table 例如 没有数据表 library data table library dplyr iris 1 1 2 NA iris 3 3 4 NA test dt lt function
  • asynsPipe 生成 null 作为第一个值

    当在 Angular 中使用异步管道时 不会立即触发事件 http 请求或任何有延迟的可观察值 得到的第一个值是null为什么会发生这种情况 如何避免这种情况
  • 数据框的减法运算

    我有2个数据框df1 and df2 df1 lt data frame c1 c a b c d c2 c 1 2 3 4 df2 lt data frame c1 c c d e f c2 c 3 4 5 6 gt df1 c1 c2
  • Android:如何获取Fragment的视图

    在课堂上 我以编程方式添加一个片段 该片段包含一个按钮 我想要一个 onClick 实现 这是我的课程 public class ShareProduct extends SherlockFragmentActivity protected
  • 考虑在配置中定义“org.springframework.security.authentication.AuthenticationManager”类型的 bean

    我遵循了这里提到的一些建议 但它对我不起作用 因此 将问题放在这里 如何在自定义过滤器中使用 Java 配置注入 AuthenticationManager https stackoverflow com questions 2163355
  • 从 PHP 到 Java。有什么建议吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi