V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX  ›  程序员

为什么同样是后端语言, Java 可以用来开发 Android(客户端), PHP 就不可以用来开发客户端?

  •  1
     
  •   drymonfidelia · 146 天前 · 4663 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突然被刚学编程的人问这个问题,发现我也解释不清楚
    35 条回复    2024-07-25 13:57:22 +08:00
    tyzandhr
        1
    tyzandhr  
       146 天前   ❤️ 1
    因为谷歌选择了 jvm 平台而已。
    Belmode
        2
    Belmode  
       146 天前 via Android
    因为 Android 上没有对应的 php 运行时和 php 基础库的支持。
    你要愿意,可以用 android 的 so 库实现 php 运行时,开发一个能跑 php 的 app ,在 app 内借助 java Bridge ,来渲染 activity ,来套娃开发页面,也是可以的。

    类似 autojs 的独立 Ui 模式,它就是用的 js Bridge 。

    本质上可以,但是没有意义,花活而已。
    pi7m1Dr691wfl95q
        3
    pi7m1Dr691wfl95q  
       146 天前
    小型系统才是 java 的本家好吧。
    Wiki 一下就有了:
    Java 是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级 Web 应用开发和移动应用开发。

    任职于 Sun 微系统的詹姆斯·高斯林等人于 1990 年代初开发 Java 语言的雏形,最初被命名为 Oak ,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun 微系统放弃了该项计划。随着 1990 年代互联网的发展,Sun 微系统看见 Oak 在互联网上应用的前景,于是改造了 Oak ,于 1995 年 5 月以 Java 的名称正式发布。Java 伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
    msg7086
        4
    msg7086  
       146 天前
    songpengf117
        5
    songpengf117  
       146 天前 via iPhone
    所谓的后端语言指的是 web 开发框架中后端 API 的开发语言,开发 Android 客户端的 Java 不再是后端语言,此时的 Java 更多的时候指的是前端 UI 开发
    iminto
        6
    iminto  
       146 天前 via Android
    因为 PHP 社区太差,成天吹牛逼,互相吹捧。看国内这一帮什么某哥,某神,什么开发者大会上一顿输出就知道了。

    10 年前,安卓 2.3 年代倒是真有个 php4android 项目,昙花一现。
    skuuhui
        7
    skuuhui  
       145 天前
    可以啊,为啥不可以,java 也不是直接运行呀,你自己实现一个把 php 编译成 class 字节码就行了。
    yKXSkKoR8I1RcxaS
        8
    yKXSkKoR8I1RcxaS  
       145 天前
    B/S 语言和 C/S 语言各有各的领域,PHP 就是为了 B/S 而生,为什么要拿去搞 C/S?
    yKXSkKoR8I1RcxaS
        9
    yKXSkKoR8I1RcxaS  
       145 天前
    可以搞,但没必要。在 C/S 领域太多优秀的语言了,PHP 还是老老实实在 B/S 深耕比较好,不然又要招惹很多骂名,说 PHP 不自量力吹牛逼。
    sagaxu
        10
    sagaxu  
       145 天前
    告诉他,技术上的选择甚至人生选择,并不是简单的能不能的问题
    error451
        11
    error451  
       145 天前
    缺乏完整成熟的解决方案。

    PHP 的定位的就是处理 http 的,官网的标题就是:PHP:Hypertext Preprocessor

    所以 PHP 围绕 web 相关的成熟解决方案非常多, 但是适合于嵌入式开发的解决方案几乎没有。

    当然,理论上 PHP 也可以做嵌入式开发, 但是这种话毫无意义,因为需要有大量的工作去做,没有人会这么自虐。

    这就好比,理论上单纯用 0/1 可以编写出世界上任何一个程序, 但是谁脑子坏了会去这么干??
    woodfizky
        12
    woodfizky  
       145 天前   ❤️ 3
    你把语言理解成铁路轨距标准、车厢标准等,每种语言都有不同的特性,适用于不同的场景。

    第一,没有最好的标准,只有最适合的;
    第二,铺轨道是要代价的,很大的代价;
    第三,基于第二点,谁先去铺了轨道,后面的人大概率是不会去改它的,而是反过来去适应它。

    谷歌已经花代价把轨道铺好了,那你想再用另一个轨距标准在同一片土地上铺不同的轨道嘛?
    除非你的轨道标准提升的生产力/效率能够降维打击前者,就像现在的高铁比普通铁路的优势,否则没必要新铺。
    ala2008
        13
    ala2008  
       145 天前
    php 有啥优势先,java 开发者应该是最多的吧。。
    coderzhangsan
        14
    coderzhangsan  
       145 天前
    楼上都已经说的很清楚了,php 自诞生之日起,就是锚定 web 市场的,你现在让它做除了 web 之外的事,太难为她了,就比如现在有的 php 开发者搞的那些框架和库,要做 tcp/udp 服务器,物联网什么的,我都不知道他们脑子里装的是什么,暂且不说市面上有那么多合适和成熟的语言可以做这些事,一个动态脚本语言做这些事有什么意义呢!

    现在有些人的思维是一门语言承担所有业务,那还要其他语言干什么呢?合适的时间用合适的工具做合适的事,做对的事比把事情做对更重要。
    meshell
        15
    meshell  
       145 天前
    看下这个吧,https://nativephp.com/
    shadowyue
        16
    shadowyue  
       145 天前
    语言还分后端、客户端吗?我觉得只是看对应平台支不支持罢了
    sujin190
        17
    sujin190  
       145 天前
    没啥不可以,只不过没现成的 Android GUI 适配基础库呗,你可以去做下适配那不就可以写了,Android 的窗口管理、绘图和消息事件都可以越过 java 写的 framework 直接调 native 库,写个 php c 扩展适配下就可以写 Android 客户端了啊,所以不存在不可以的情况吧,只不过好像用处不大,毕竟越过 framework 毕竟不方便而且 php 也没这生态啊
    meshell
        18
    meshell  
       145 天前
    @meshell 虽然也是多种工具的组合。
    qcbf111
        19
    qcbf111  
       145 天前
    没人做而已,任何语言都可以支持,其实不仅仅是 java ,就算彻底脱离 java ,也有像 flutter 现在有很多 APP 了,c#也有王者荣耀原神这些游戏,通过自己调用图形 api 的方式自己渲染来开发 Android 。
    lisxour
        20
    lisxour  
       145 天前
    不是不可以,而是没人搞
    fkdtz
        21
    fkdtz  
       145 天前
    本质上来说无论用什么语言编写的程序,最终都可以编译成二进制可执行文件并在设备上运行,我认为从技术上来讲并不存在只有哪个语言可以做,哪个语言不可以做的情况。
    之所以选择用 Java 开发 Android 是因为 Java 在端上运行有一些其他语言不具备的优势,最主要的就是有 JVM 的存在,Java 以“一次编写到处运行”而著称,这个特性在小型终端场景的优势尤其明显,可以让应用层开发可以尽量少的关注底层设备的差异,毕竟 Android 设备的型号架构可能千差万别,甚至于说最初 Android 是给数码相机开发的操作系统你敢信?
    zjsxwc
        22
    zjsxwc  
       145 天前
    php 没有多线程,早期安卓给的权限高,你客户端基于事件的 GUI 交互,php 就不合适。
    现在权限收拢,js 也适合做安卓 GUI 客户端。

    所有没多线程但有浏览器支持的 js ,更合适做 GUI 客户端,那么如果有浏览器支持、没多线程的 php 也能适合做 GUI 客户端,比如 PHP WASM,把 php 编译到 wasm ,然后浏览器里运行 php 脚本,于是 php 前后端代码也同构了。
    me1onsoda
        23
    me1onsoda  
       145 天前
    语言从来就没有限定它是后端还是前端。以前好多功能机小游戏开屏就是 Java logo
    janus77
        24
    janus77  
       145 天前
    第一因为谷歌给他做了个定制的 JVM 虚拟机
    第二,安卓原生的代码都是编译成字节码的,性能比 php 这种脚本语言高很多,还有成熟的和 C++交互的方案,这尤其对于图形界面等性能敏感场景非常重要
    crocoBaby
        25
    crocoBaby  
       145 天前
    理论上所有编程语言可以做所有开发,但是前提是有人用爱发电去做编译配套
    brando
        26
    brando  
       145 天前
    PHP 可以开发,但没优势,性能,成本等摆在那的。开发总要考虑经济成本的,后续可持续性等等,所以 PHP 一般适合 WEB 脚本。
    815979670
        27
    815979670  
       145 天前
    我之前学 php 的时候老师举过一个例子,用 php 开发客户端软件就是用屎盆子吃饭,从原理上说是可以这样用的,但没有人会这样用
    kid1412621
        28
    kid1412621  
       145 天前 via iPhone
    别说 GUI 了,CLI 都没怎么看到过
    cexll
        29
    cexll  
       145 天前
    语言只是语法 就如同方言,得看有人底层开发了什么,有人用 c 写了客户端 只支持 java 那你就只能用 java 写,永远都是底层要求什么,然后你使用什么语言
    mightybruce
        30
    mightybruce  
       145 天前
    因为 Android 的虚拟机 DVM(Dalvik VM) 让 java 成为了主要语言, 但是关键要求性能的开发已经不用 java, 都用 c++ 和 rust 来做,比如字节就招 rust 做安卓开发。
    PHP 本身能做客户端,但是没有任何优势, 比 PHP 好点的 react-native 还不是很多人用来做客户端。
    cheng6563
        31
    cheng6563  
       145 天前
    Java 一开始是可以在浏览器上跑的,并不是什么后端语言...
    kalman03
        32
    kalman03  
       145 天前
    什么是后端语言,什么是前端语言? JSP 算前端语言吗? Swing 呢?基于 Java Applet 运行的呢?

    很明显,职能分的太细了!真正的全栈已经越来越少了。
    resetsix
        33
    resetsix  
       145 天前 via Android
    主要有以下原因
    1. 语言设计目的:
    - Java:最初设计为通用编程语言,可用于服务器端、桌面应用和嵌入式系统。
    - PHP:主要设计用于服务器端 Web 开发。
    2. 执行环境:
    - Java:可以编译成字节码,在 Java 虚拟机( JVM )上运行。Android 使用一种特殊的 JVM 叫做 Dalvik/ART 。
    - PHP:通常在服务器上解释执行,不直接在客户端设备上运行。
    3. 移动平台支持:
    - Java:Android 选择 Java 作为其主要开发语言,提供了完整的 Android SDK 。
    - PHP:没有专门为移动平台设计的运行时环境。
    4. 性能考虑:
    - Java:编译后的字节码执行效率较高,适合资源受限的移动设备。
    - PHP:作为解释型语言,在移动设备上可能会面临性能问题。
    5. API 和库支持:
    - Java:Android 提供了大量 Java API 来访问设备功能(如相机、传感器等)。
    - PHP:缺乏访问移动设备硬件和系统功能的原生 API 。
    6. 开发工具链:
    - Java:有成熟的 IDE 和工具链支持 Android 开发(如 Android Studio )。
    - PHP:开发工具主要针对 Web 开发,不适用于移动应用开发。
    7. 编译 vs 解释:
    - Java:可以预先编译,生成可直接在 Android 设备上运行的 APK 。
    - PHP:通常需要服务器环境来解释执行,不适合打包成独立应用。
    总结,Java 之所以可以用于 Android 开发,主要是因为 Android 平台的设计决策和 Java 语言的特性非常匹配,而 PHP 的设计初衷和特性更适合服务器端 Web 开发。收工
    kokerkov
        34
    kokerkov  
       145 天前
    因为之前从 Nokia 功能机时代以来,java 一直是手机端的开发语言。这样转换对程序员来说比较容易?我猜的。要知道安卓起步阶段市场上也有其他操作系统比如 win 、S60 之类的。
    cnzjl
        35
    cnzjl  
       144 天前
    整一个 pvm:php on Jvm !
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:20 · PVG 08:20 · LAX 16:20 · JFK 19:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.