7

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

4

1 回答 1

2

Javascript 的模块提供了一些不错的特性,例如封装、私有状态,甚至从其他模块继承。虽然它们提供了类的一些特性,就像在 PHP 中一样,但它们不是。他们试图在现有的 Javascript 功能上构建来模拟类,因此会造成混淆。即它们的外观和感觉都像类

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

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

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

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

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

于 2012-08-01T18:17:45.103 回答