js中的模块和php中的类之间有什么区别
What is the difference between Modules in js and Classes in php?
我正在网上学习模块,js中的模块和php中的类似乎非常相似。为了更容易理解编码,两种功能组合在一起。函数可以同时声明,也可以公开或私有。它们在使用上有什么相似之处,又有什么不同之处?
Javascript的模块提供了一些不错的功能,如封装、私有状态,甚至从其他模块继承。虽然它们提供了类的一些特性,就像在PHP中一样,但它们不是。他们试图在现有的Javascript函数性的基础上模拟类,因此产生了混乱。即它们被构建为看起来和感觉像类。
Javascript的模块是分配给变量的匿名函数的实例。因此,它们具有从上到下执行代码的函数的所有功能,它们有并且有时使用返回语句(在PHP类中,除了字段定义和赋值之外,没有任何语句可以直接运行),它们甚至可以访问全局变量。另一方面,在PHP中,一个类,或者更确切地说,它的方法,不能访问不在类本身中的变量。为了访问全局变量,类方法或静态函数必须显式调用变量,即global $a
才能导入它。在js模块中,所有全局变量都是可访问的,但有时为了更简洁的代码(function(a){})(imported);
,人们选择显式导入它们
另一个重要问题是数据抽象。虽然js模块为字段提供私有状态,但PHP的类,就像C++、java、python等,为属性提供了更多的安全性。它允许使用abstract class
和interface
关键字的基类,其中类方法和属性仅被定义或结构化,而不被使用。
PHP类还有构造函数和析构函数,它们在初始化类对象时被调用,最后一次被用来销毁对象。当然,您可以在模块中创建函数,以便在需要时运行。另一方面,在PHP中,方法中的函数只有在被对象、类或其他函数调用时才执行。
在类中有静态函数,这些函数可以在没有类的对象的情况下调用,并且独立于对象运行,另一方面,在js中,一切都是对象;这违背了静态函数的观点。
它们的相似之处在于:两者都具有继承性,可以用新模块扩展现有模块,在PHP中可以使用extends
从父类继承。它们都有防止外部访问的私有数据状态,它们都对数据和方法进行分组和打包,如果使用得当,它们都非常棒。
- 全局变量和全局对象的属性之间有什么区别吗
- 在ember/handlers中使用value和valueBinding有什么区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- webpack开发模式和生产构建模式之间有什么区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 以下两者在javascript中有什么区别
- jquery.js和jquery.lite.js有什么区别
- 通过Nuget安装Angular JS和Angular JS核心有什么区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 这两种不同的创建对象文字的方法有什么区别
- jQuery中这两个词有什么区别
- 在Javascript语法中:和::和:::有什么区别
- getElementById 和 getElementsByClassName 有什么区别?
- (typeof variable === “function”) 和 jQuery.isFunction() 有什么区别
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- $(e.target).find和template.find('input').value之间有什么区别
- 在javascript中,在变量名之前使用var有什么区别/优势吗