js中的模块和php中的类有什么区别?

js中的模块和php中的类有什么区别?,php,javascript,singleton,Php,Javascript,Singleton,我正在网上学习模块,似乎js中的模块和php中的类非常相似。这两个组一起工作,以便更容易理解编码。函数可以同时声明,也可以公开或私有。它们在使用上有什么相似之处,又有什么不同之处?Javascript的模块提供了一些很好的功能,比如封装、私有状态,甚至从其他模块继承。虽然它们提供了一些类的特性,比如在PHP中,但它们不是。他们试图在现有Javascript函数的基础上进行模拟类,因此产生了混淆。i、 e.它们的外观和感觉都像班级 Javascript的模块是分配给变量的匿名函数的实例。因此,它们

我正在网上学习模块,似乎js中的模块和php中的类非常相似。这两个组一起工作,以便更容易理解编码。函数可以同时声明,也可以公开或私有。它们在使用上有什么相似之处,又有什么不同之处?

Javascript的模块提供了一些很好的功能,比如封装、私有状态,甚至从其他模块继承。虽然它们提供了一些类的特性,比如在PHP中,但它们不是。他们试图在现有Javascript函数的基础上进行模拟类,因此产生了混淆。i、 e.它们的外观和感觉都像班级

Javascript的模块是分配给变量的匿名函数的实例。因此,它们具有一个函数的所有特性,在这个函数中,它们的代码是自上而下执行的,它们有并且有时使用一个返回语句(在PHP类中,除了字段定义和赋值之外,没有任何语句可以直接运行),它们甚至可以访问全局变量。另一方面,在PHP中,类或其方法不能访问不在类本身中的变量。为了访问全局变量,类方法或静态函数必须显式调用变量,即
global$a
,以便导入它。在js模块中,所有全局变量都是可访问的,但有时我们会选择显式地导入它们,以便更简洁的代码
(函数(a){})(导入)

另一个重要问题是数据抽象。虽然JS模块为字段提供私有状态,但是PHP类,就像C++、java、python等,对属性提供了更多的安全性。它允许基类使用
抽象类
接口
关键字,从而只定义或构造类方法和属性,而不使用它们

PHP类还具有构造函数和析构函数,它们在初始化类对象时调用,最后一次提到时用于销毁对象。当然,您可以在模块中创建函数,以便在需要时运行。另一方面,在PHP中,方法中的函数仅在对象、类或其他函数调用时执行

在类中有静态函数,这些函数甚至可以在没有类的对象的情况下调用,并且独立于对象运行,另一方面在js中,一切都是对象;这违背了静态函数的观点


它们的相似之处在于:两者都有继承,可以用新模块扩展现有模块,在PHP中可以使用
extends
从父类继承。它们都有防止外部访问的私有数据状态,它们都对数据和方法进行分组和打包,并且在正确使用时都非常棒。

这不是一个直接的答案,但类不仅仅是为了使函数更易于理解。它们的主要目的是抽象(隐藏实现细节)、封装(只允许每个对象执行某些操作)和模块化(使每个类易于移植)。