这两种初始化PHP类的方法有什么区别?
我想知道这两种方法之间的差异用于初始化类这两种初始化PHP类的方法有什么区别?
方法1(使用范围解析运算符)的对象:
Test::foo();
方法2(创建对象的实例) :
$test = new Test;
$test->foo();
这是什么->
运算符叫?
Test::foo()
只是静态调用一个类的方法,它不会对对象做任何事情。它可能会初始化类中的静态值,但通常不使用静态初始值设定项。在Singletons的情况下,可以在内部使用静态初始化程序,但不应该像这样调用公共静态初始化程序。
$test = new Test
实际上实例一个对象,在该方法中有可能初始化。
请注意区别之间初始化(设置对象/类/变量的初始状态),并且的instantiate(创建从一个类对象实例)。
->
是T_OBJECT_OPERATOR
。
::
被称为 “Paamayim Nekudotayim”(它的希伯来文),->
是对象操作:
http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php
也不应该被用来初始化类。有一个神奇的__construct()
方法是,它是由new
操作自动调用:
http://php.net/manual/en/language.oop5.decon.php
Test::foo()
意味着调用方法foo()
静态,实际对象的范围之外。把它看作某种(慢)名称空间函数。
$test->foo()
表示对象$ test的调用方法foo()
。
我把它叫做一个箭头......但不同的是,用箭头的方法,你正在创建一个类的新实例作为对象,然后可以作为一个对象引用。另一个只是调用某个类的某种方法。通过这个对象,你可以存储属性和调用函数,并将事物存储在那个对象中,并且你可以调用该对象的多个实例并单独使用它们......我漫不经心,但有很多事情可以用只调用单独方法的对象是有限的。
匿名downvote?谢谢。 – spanky 2011-05-20 07:26:33
你需要利尔接力(Object Oriented Programming),以及PHP
的内部类的功能此实现,被调用的方法,这种方法可以叫上类的实例,或在静态模式下,第一次调用,不要创建类*的一个实例,这个调用的方法“富”是静态的。
class Test {
public static $static_atribute;
public $normal_atribute;
public function Foo($q) {
$this->normal_atribute = $q;
}
public static function SFoo ($q) {
// I dont can access to $this
self::$static_atribute = $q;
}
}
Test::Foo("hello");
// This thrown an error because $this dont exist in static mode
Test::SFoo("hello");
//This works, and the static property change
echo Test::$static_atribute;
// this puts "hello"
echo Test::$normal_atribute;
// this thrown an error
$a = new Test();
// $a is an instance of Test
$a->foo("hello");
// this works and the normal_atribute change in THIS instance
$b = new Test();
// $b is anoter instance of Test
$b->foo("bye");
// normal_atribute change in THIS instance
echo $a->normal_atribute;
// puts hello
echo $b->normal_atribute;
// puts bye
- 没有在sused的模式。所谓Singleton Pattern
[PHP中 - >和::之间有什么区别?](http://stackoverflow.com/questions/1804187/what-is-the-difference-between-and-in-php) – 2011-05-20 06:51:27