试图找到关于此的一些信息,但我不能得到任何结果可能是由于使用的字符。OOP中的 - >和::之间的区别是什么
以下是什么区别,因为我收集他们做同样的事情。
$classname->function()
Classname::function()
第二个示例是否自动实例化对象?
试图找到关于此的一些信息,但我不能得到任何结果可能是由于使用的字符。OOP中的 - >和::之间的区别是什么
以下是什么区别,因为我收集他们做同样的事情。
$classname->function()
Classname::function()
第二个示例是否自动实例化对象?
前者(->
)用于调用非静态成员(方法或函数/属性或变量),而后者(::
)用于调用静态成员。
非静态:
class foo{
function bar(){ echo 'test'; }
}
$foo = new foo();
$foo->bar();
静态:
class foo{
static function bar(){ echo 'test'; }
}
foo::bar(); // no class initialization needed
详情参见这个问题:
PHP: Static and non Static functions and Objects
为了更好地了解日e概念,你应该看看what static methods are以及它们与非静态的不同之处。
这真的清除了事情对我来说,我不知道他们有不同的名字是诚实的。非常感谢,但。 – 2012-02-07 12:25:50
@ShaneJones:不客气 – Sarfraz 2012-02-07 12:27:07
不,第二个是调用静态方法。 Check here。
第二个示例不会自动实例化对象。因此,在第二种调用方式中,如果您在函数中使用了$ this,将会出现如下错误: PHP致命错误:在不在对象上下文中时使用$ this。
一般来说, - >用于调用非静态方法,::用于调用静态方法。
但在php中并不那么严格。 例如:
error_reporting(E_ALL);
class A {
public static function staticFunc() {
echo "static";
}
public function instanceFunc() {
echo "instance";
}
}
A::instanceFunc(); // echo "instance"
$a = new A();
$a->staticFunc(); // echo "static"
两个方法称为上面成功运行。
因为PHP总是以渐进的方式实现新功能,以确保兼容性,这可能会导致一些细节并不在乎。 但是,如果你设定error_reporting级别E_STRICT,你会发现这样的错误E_STRICT:
严格的标准:非静态方法A :: instanceFunc()不应该被静态调用
这些唯一的区别有两种方法:当你用::调用一个方法时,你不能使用变量$ this。
但仍建议您像其他面向对象语言一样严格使用这两种方法。
您可以在http://www.php-internal.com/book/?p=chapt05/05-02-class-member-variables-and-methods
得到更多的信息这已经被覆盖了一百万次。你的PHP书在哪里? – 2012-02-07 11:36:20
[参考 - 这是什么符号在PHP中的意思?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – hakre 2012-07-12 16:44:29