0

我见过这样的类:

$Class = ClassName::methodName();

并且

$Class = new ClassName();
$Class->methodName();

两者有什么区别?

我问的原因是因为在 CakePHP 中,CakeEmail 像第二个例子一样被调用,但所有其他类都像第一个例子一样被调用......

例如http://book.cakephp.org/2.0/en/core-utility-libraries/email.htmlhttp://book.cakephp.org/2.0/en/core-utility-libraries/security.html

4

1 回答 1

2

这是静态方法和常规方法之间的区别。

静态方法不需要为要使用的方法实例化类。类中的常规方法需要实例化类。

您可以在 PHP 手册中阅读更多内容。

静态关键字,http ://php.net/manual/en/language.oop5.static.php

实际上并不是所有的类在 CakePHP 中都是静态的,事实上恰恰相反。有一些静态方法。

CakeEmail 类需要实例化类实例的原因是它使用类变量和类中的其他方法在发送电子邮件之前设置电子邮件的各个部分。__constructor()因此,当类被实例化时,一些设置将被存储在其中运行。

由于类中的其他方法,例如添加主题会写入类变量,因此需要首先存在该类的实例。

于 2013-08-13T21:40:51.307 回答