2010-11-13 94 views
2

是否有任何性能差异?主要区别是什么? ,还有更多像类范围和对象范围之间的区别

public static function 
static public function 

它是一样的吗?

抱歉的新手问题 感谢在

亚当·拉马丹

+3

你是指class :: hello()和$ class-> hello()之间的区别吗?我在标签中看到静态 – 2010-11-13 07:16:44

+0

我只是不明白为什么人们使用它们?告诉通常的问题是什么,以便我必须使用静态标签。 – 2010-11-13 07:20:13

+0

噢好吧,我明白了,让我编辑我的答案! – 2010-11-13 07:30:10

回答

2

寻找有两个没有什么区别:

public static function 
static public function 

这两个类的外部访问。在这两种情况下,你都不能在函数内使用$ this,因为静态函数并不要求实例化一个对象。

考虑你有一个Cars类。

// Constructors call to a private static function add_this_car(); 
$car1 = new Cars('bentley'); 
$car2 = new Cars('Porsche GT1'); 

// public static function get_created_cars(); 
$all_cars = Cars::get_created_cars(); 

这样一个类可以照顾它的所有实例(以及对每个实例的引用)。还有应该由类本身处理并且不需要创建实例的东西。

+0

jessy said(irC#php)static表示它定义在类范围rathar而不是object scope,我只是不懂静态的东西(我从来没有用过它们),我的意思是它们是如何工作的,等等,尤其是在面向对象的编程中。我使用像$ this->不是这个::或与::静态魔术的东西。 :),我希望你明白我的意思 – 2010-11-13 07:32:31

+0

这是否编辑回答你的问题如何使用“静态”功能? – 2010-11-13 07:37:39

+0

所以最差的是我们不需要启动它们?还有其他差异,如表演或任何? – 2010-11-13 07:45:28

1

想象一下,像一个漂亮的容器一样,静态方法可以将相关函数放在一起。

假设你想创建一个完整的你喜欢的字符串格式化函数。

然后你可以说MyClass::MakeUppercase($string)使字符串大写。你可以说MyClass::MakeLowercase($string)使字符串小写。

由于您的工具类不代表任何类型的对象,也没有任何类型的内部状态来跟踪,您没有理由实例化它的对象。没有$myvar = new MyClass()才能使用这些功能。这只会浪费内存创建永远不会有不同内部状态的对象来跟踪。

+0

所以范围只是在class :: afunction?我是否正确? – 2010-11-13 07:47:48