何时在PHP中使用Class vs. Function

jay*_*jay 61 php class function

灯泡尚未继续......

我真的很喜欢一个易于理解的解释,在php中使用一个类而不仅仅是使用函数.

这是我现在想到的一个简单的例子,我想知道一个班级是否更有效率:

假设我有一个我用PHP构建的迷你日历小部件.我在考虑调用这个函数miniCal('arrayVars1', 'var2').但我可能会在那个页面上做两次.通过在这里使用类来使用更少的资源,创建它的新实例?

我应该在这里吠叫什么树,因为我觉得现在这棵树是一堵砖墙......

Kal*_*see 54

类用于将数据表示为对象.如果您要表示类似用户数据或拍卖出价的内容,则创建User对象或AuctionBid对象可以更轻松地将这些数据保存在一起,在代码中传递它,并使读者更容易理解.这些类将具有属性(数字字段,如数字,字符串或其他对象)以及方法(可以在任何类上操作的函数).

类通常不会在性能方面提供任何好处,但它们也很少有任何负面影响.他们真正的好处是使代码更清晰.

我建议你阅读PHP5面向对象编程指南Wikipedia OOP条目.


Joh*_*nde 38

自PHP5以来,常见的事情是创建充当库的类.这为您提供了组织功能和利用__autoload()等类功能的好处.

例如,假设您有两个用于加密和解密数据的函数.您可以将它们包装在一个类中(让我们称之为加密)并使它们成为静态函数.然后你可以使用这样的函数(注意不需要初始化(即$ obj = new Encryption)):

$encrypted_text = Encryption::encrypt($string);
Run Code Online (Sandbox Code Playgroud)

$decrypted_text = Encryption::decrypt($string);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是:

  1. 您的加密功能组合在一起并进行组织.您和维护代码的任何人都知道在哪里可以找到您的加密功能.
  2. 这非常清晰易读.有利于可维护性.
  3. 您可以使用__autoload()自动为您包含该类.这意味着您可以像使用内置函数一样使用它.
  4. 因为它包含在自己的类和自己的文件中,所以它是可重用的,并且可以很容易地移植到新项目中.


小智 7

函数是应用程序的核心,而类更像是盘子。没有盘子吃肉是很乱的。但是如果你没有肉,你就没有饭吃。

如果您的应用程序中有 500 个函数,您可能希望将其中至少一半分组到更大的集合中以便于访问。您可以设计常见的命名约定(“Encryption_Encrypt”、“Encycryption_Decrypt”等)……但类更简单。如果您的应用程序中只有 12 个函数,那么您可能只需要 1 个或多个类(如果有的话)。

我通常不需要在类中存储数据/属性。我倾向于将它们存储在数据库中。所以我没有经常利用课程的这一方面。

类还允许多态性,这很有帮助。如果你有几个非常相似的类,或者一个类的几个变体,你可以节省代码……而不必构造一些多用途的、类似弗兰肯斯坦的类。


Jul*_*ian 6

使用类是分组函数的好方法.

不同之处在于编程范式的使用.类在OOP中是必需的,但在程序范例中不是必需的.在Procedural范例中,您可以将函数分组到一个文件中,该文件可以看作是一个模块.

---编辑---

你可以使用程序范式.在这个范例中并不真正需要类.

function miniCal($string_1, $string_2){
//do something   
}

//invoke function
miniCal('arrayVars1', 'var2');
Run Code Online (Sandbox Code Playgroud)

你可以使用OOP范例.需要课程.

class Calculation {

public static function miniCal($string_1, $string_2){
    //do something   
    }
}

//invoke function
Calculation::miniCal('arrayVars1', 'var2');
Run Code Online (Sandbox Code Playgroud)

结论

这两个范例的工作,但上面的OOP示例使用包含所有计算方法(函数)的Calculations对象.Calculations对象将计算函数分组,从而将它们保存在一个位置.

本例中的OOP范例遵循一种称为"坚定责任"的原则.这背后的想法是保持代码优雅,可维护和可读.

  • 是的,我回头看看我的一些并编辑它们,同时畏缩.至少它证实了我们正在学习:) (7认同)
  • 哇,我一年前给出了多么可怕的答案。让我编辑一下。 (2认同)