簡體   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