JavaScript的模块和PHP中的类有什么区别?

7

我正在学习有关模块的知识,发现JavaScript中的模块和PHP中的类非常相似。二者都将函数组合在一起,以便更容易理解编码。两者都可以声明函数并使其成为公共或私有的。那么它们在使用上有何相似之处,又有何不同之处呢?


2
不是直接回答,但类不仅仅是为了让函数更易于理解。它们的主要目的是抽象化(隐藏实现细节),封装(只允许每个对象执行特定操作)和模块化(使每个类易于移植)。 - Palladium
1个回答

2
Javascript的模块提供了一些很好的功能,比如封装、私有状态,甚至可以从其他模块继承。虽然它们提供了一些类似于PHP中类的特性,但它们并不是类。它们试图在现有的Javascript功能基础上模拟类,这就是为什么会产生混淆的原因。也就是说,它们被设计成“看起来和感觉像类”。
Javascript的模块是一个赋值给变量的匿名函数的实例。因此,它们具有所有函数的特性,其中它们的代码从上到下执行,它们有时使用返回语句(在PHP类中,除了字段定义和赋值之外,不能直接运行任何语句),它们甚至可以访问全局变量。而在PHP中,一个类或者说它的方法不能访问不在类本身中的变量。为了访问全局变量,类方法或静态函数必须显式调用变量,即global $a以导入它。在js模块中,所有全局变量都是可访问的,但有时人们选择显式导入它们以获得更整洁的代码:(function(a){})(imported); 另一个重要问题是数据抽象。虽然js模块为字段提供了私有状态,但PHP的类(就像C++、Java、Python等)为属性提供更高的安全性。它允许使用abstract classinterface关键字来定义或结构化类方法和属性,而不是使用它们。
PHP类还具有构造函数和析构函数,当初始化类对象时会调用它们,并在最后一次使用时用于销毁对象。当然,你可以在模块中创建函数以在需要时运行,在PHP中,方法中的函数只有在它们被对象、类或其他函数调用时才会执行。
在类中有静态函数,这些函数甚至可以在没有类对象的情况下调用并独立于对象运行。而在js中,一切都是对象;这就失去了静态函数的意义。
它们相似之处在于:它们都有继承,其中你可以用新模块扩展现有模块,在PHP中,你可以使用extends从父类继承。它们都有防止外部访问的私有数据状态,它们都分组和打包数据和方法,只要正确使用,它们都非常棒。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接