我正在学习在线模块,似乎js中的模块和php中的类非常相似。两个组一起工作以便于理解编码。功能可以在两者中声明,也可以公开或私有。它们在使用中有何相似之处,它们有何不同?
答案 0 :(得分:2)
Javascript的模块提供了一些很好的功能,如封装,私有状态甚至是其他模块的继承。虽然它们提供了类的一些功能,但在PHP中却没有。他们试图在现有的Javascript functonality的基础上模拟类,因此混淆了。即它们构建为外观和感觉类。
Javascript的模块是分配给变量的匿名函数的实例。因此,它们具有函数的所有功能,其代码从上到下执行,它们有时使用 return语句(在PHP类中,除了字段定义和赋值之外,没有语句可以直接运行)他们甚至可以访问全局变量。另一方面,在PHP中,类或者它的方法不能访问类本身不存在的变量。为了访问全局变量,类方法或静态函数必须显式调用变量,即global $a
才能导入它。在js模块中,所有全局变量都可以访问,但有时会选择明确导入它们以获得更整洁的代码(function(a){})(imported);
另一个重要问题是数据抽象。虽然js模块为字段提供私有状态,但PHP的类(如C ++,java,python等)为属性提供了更多的安全性。它允许使用abstract class
和interface
关键字的基类,其中类方法和属性仅定义或结构化但不使用。
PHP类也有构造函数和析构函数,它们在初始化类对象时被调用,并且在最后一次提及时用于销毁对象。当然,您可以在模块中创建函数以便在需要时运行,另一方面,PHP中的函数只有在被对象,类或其他函数调用时才会执行。
在类中有静态函数,这些函数甚至可以在没有类的对象的情况下调用并且独立于对象运行,另一方面在js中,一切都是对象;这打破了静态功能的重点。
它们的相似之处在于:两者都具有继承性,您可以使用新的扩展现有模块,而在PHP中,您可以使用extends
从父类继承。它们都具有阻止外部访问的私有数据状态,它们分组和打包数据和方法,并且在正确使用时都很棒。