4

为什么 mod_python 是 oop 而 mod_php 不是?

示例:我们去 www.example.com/dir1/dir2

如果你使用 mod_python apache 打开 www/dir1.py 并调用 dir2 方法但是如果你使用 php 模块 apache 打开 www/dir1/dir2/index.php

4

6 回答 6

8

让我们谈谈 mod_python 与 mod_php。

由于 Python 语言不是专门为网页服务而设计的,所以 mod_python 必须做一些额外的工作。

由于 PHP 语言是专门为网页服务而设计的,所以 mod_php 只需启动一个命名的 PHP 模块。

对于 mod_python(不同于 mod_fastcgi 或 mod_wsgi),mod_python 的设计者决定调用 Python 的最佳方式是调用模块中定义的对象的方法。希望该对象的该方法将标题和网页内容写入标准输出。

对于 mod_wsgi,设计者决定调用 Python 的最佳方式是调用模块中的函数(或可调用对象)。希望该函数将使用提供的对象来创建标题并返回带有网页内容的列表字符串。

在 mod_php 的情况下,它们只是调用模块,因为 PHP 模块是为网页服务而设计的。程序运行,运行的结果是一页内容;通常是 HTML。

mod_php 以一种方式工作,mod_python 以另一种方式工作而 mod_wsgi 以第三种方式工作的原因是因为它们不同。由不同的人编写,对产生网页的方式有不同的定义。

php 页面可以是面向对象的。mod_wsgi 函数可能是一个可调用对象,也可能是一个简单函数。这些是设计选择。

类的 mod_python 要求是 mod_python 的设计者做出的设计选择。

“为什么”的理由永远没有用。“为什么”的原因是因为有人决定这样设计它。

于 2009-05-17T03:02:35.410 回答
4

因为 mod_python 将 URL 抽象为“类 RPC”机制。您可以在 PHP 中实现相同的功能。我总是手工完成,但我很确定有为此预先打包的 pear 模块。

请注意, mod_python 行为并不是强制“最好的”。这一切都取决于您想为您的应用程序提供的设计类型,以及它对客户的行为方式。据我所知,mod_python 方法假定每个 URL 都有一个函数,例如将模块结构映射到 URL 树。从技术上讲,这不是一个特别好的方法,因为您使用的技术 (mod_python) 与应用程序的 URL 布局之间存在紧密的关联。

至于为什么,没有理由。有些人喜欢一种食物,有些人喜欢另一种食物。在某些情况下,设计是品味和艺术选择的问题,而不仅仅是技术限制。

于 2009-05-16T17:05:39.900 回答
4

我认为您对 HTTP 的工作方式有一些误解。http 标准中没有任何内容要求您将某个文件作为资源。这就是 mod_php 的工作方式,对于给定的路径,该路径被转换为服务器磁盘上的 php 文件,然后由编译器解释。

另一方面, mod_python 模块更加通用,它允许您将任何资源映射到对某个 python 对象的调用碰巧有些配置是开箱即用的,以使其更容易开始。在大多数情况下,url 的调度是由你的框架管理的,它的工作方式取决于框架的实现者。

由于mod_python模块的通用性,您还可以访问mod_php模块中不可用的一些 apache 功能,例如,您可以编写自己的身份验证处理程序,这不仅适用于您的 python webapp,还适用于您的 apache 中的其他应用程序也是如此。

于 2009-05-16T17:54:27.380 回答
0

在 PHP 中,您可以对网页进行自上而下的脚本、过程编程和函数调用、OOP 编程。这是最初创建 PHP 以及它如何发展的主要原因。mod_php 只是 web 服务器使用 PHP 作为预处理器的模块。所以它只是将 HTTP 信息和 PHP 脚本传递给 PHP 解释器。网页创建的PHP方式是做你想做的;编写一个从上到下的脚本,在不同的文件中定义函数并包含这些函数并调用函数,或者用 OOP 编写您的应用程序,您现在还可以使用许多功能齐全的框架来确保您的应用程序设计和结构符合当今的最佳实践和设计模式。

我是 Python 新手,不熟悉使用 Python 进行 Web 编程。但据我所知,创建 python 并不是为了让 Web 编程更容易。它旨在成为一种通用编程语言,因此尽管可以在 python 中编写简单的从上到下的脚本并将它们作为网页响应运行(我不确定这样的事情是否可能),但它是不是 Python 的方式,所以我认为 mod_python 的开发人员希望 Python 中的 Web 编程采用 Python 的方式。

于 2009-05-17T04:11:45.153 回答
-1

也许我误解了你的问题,但是 Python 和 PHP 都支持过程和面向对象的编程。(尽管有人可能会争辩说 Python 对 OO 的支持是两者中更强的。)

于 2009-05-16T16:09:08.290 回答
-1

查看PHP 5 中的类和对象

于 2009-05-16T16:11:11.467 回答