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

What is the difference between Modules in js and Classes in php?

本文关键字:什么 区别 之间 php 模块 js      更新时间:2023-09-26

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

Javascript的模块提供了一些不错的功能,如封装、私有状态,甚至从其他模块继承。虽然它们提供了类的一些特性,就像在PHP中一样,但它们不是。他们试图在现有的Javascript函数性的基础上模拟类,因此产生了混乱。即它们被构建为看起来和感觉像类。

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

另一个重要问题是数据抽象。虽然js模块为字段提供私有状态,但PHP的类,就像C++、java、python等,为属性提供了更多的安全性。它允许使用abstract classinterface关键字的基类,其中类方法和属性仅被定义或结构化,而不被使用。

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

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

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