Diffrences of $this:: and $this-> in php
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
PHP: self vs. $this
我发现可以通过$this::prefix调用类方法。例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class class1 { public function foo() { echo"1"; } public function bar() { $this::foo(); //in this example it acts like $this->foo() and displays"2" //using self::foo() displays"1" } } class class2 { public function foo() { echo"2"; } public function bar() { class1::bar(); } } $obj = new class2(); $obj->bar(); // displays"2" class1::bar(); // Fatal error |
我想知道用$this->和$this::前缀调用方法有什么不同。
PS:此链接中有一页关于$this->foo()和self::foo()的差异:什么时候用自己超过$这个?
您链接的答案确切地告诉您正在寻找什么;)。
基本上,有些人在编程语言中很难区分两个概念:对象和类。
类是抽象的。它定义对象的结构。如果对象是从该类生成的,则对象将包含的属性和方法。当您调用
关于创建一个对象,需要注意的重要一点是它也有自己的范围。这就是$this与static::(注意:不要使用self::或$this::,请使用static::(稍后将详细介绍))来播放的地方。使用
下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class MyClass { public $greeting; public static $name; public greet() { print $this->greeting ."" . static::$name; } } $instance1 = new MyClass(); $instance1->greeting = 'hello'; $instance2 = new MyClass(); $instance2->greeting = 'hi'; MyClass::$name = 'Mahoor13'; $instance1->greet(); $instance2->greet(); |
我没有测试上述内容,但您应该得到:
你好,马霍罗13你好!
这应该让我们大致了解设置类属性和设置实例属性之间的区别。如果您需要其他帮助,请通知我。
编辑
$this::似乎只是PHP处理作用域方式的副作用。我不会认为它是有效的,也不会使用它。它似乎没有得到任何支持。
$this->是从实例调用的,因此必须有对象的实例才能使用此调用。
但是$this::是类内的一个静态方法,您可以在没有实例的情况下调用它,因此不需要分配类的实例来像这样调用它。
1 2 | myclass::doFoo(); public static function doFoo(){ .... } |
do函数应该是静态函数来这样调用它,否则PHP会在新版本中出错。