繁体   English   中英

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

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

我正在在线学习模块,似乎js中的模块和php中的类非常相似。 两组功能一起使用,以便于理解代码。 可以在函数中声明函数,也可以将函数设为公共或私有。 它们在用法上有何相似之处,又有何不同?

Javascript的模块提供了一些不错的功能,例如封装,私有状态,甚至从其他模块继承。 尽管它们提供了类的某些功能,但在PHP中却没有。 他们尝试在现有Javascript功能的基础上模拟类,因此感到困惑。 即它们的外观和感觉就像类

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

另一个重要问题是数据抽象。 js模块为字段提供私有状态,而PHP的类(如C ++,java,python等)为属性提供了更高的安全性。 它允许使用abstract classinterface关键字使用基类,从而仅定义或结构化类方法和属性,而不使用它们。

PHP类还具有构造函数和析构函数,它们在初始化类对象时被调用,并且在最后提及时用于销毁该对象。 当然,您可以在模块中创建要在需要时运行的函数,而在PHP中,方法中的函数仅在对象,类或其他函数调用它们时才执行。

在类中有静态函数,即使没有类的对象也可以调用这些静态函数,而这些函数独立于对象运行,另一方面,在js中,一切都是对象。 这打败了静态函数的观点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM