这个问题在这里已经有了答案:
9年前关闭。
Possible Duplicate:
PHP: self vs. $this
我发现我可以通过 $this::前缀调用类方法。例子:
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::前缀调用方法的区别是什么。
附:
在此链接中有一个关于 $this->foo() 和 self::foo() 差异的页面:
When to use self over $this?
最佳答案
您链接的答案会准确地告诉您要查找的内容;)。
基本上,有些人在编程语言中很难区分两个概念:对象和类。
一个类是抽象的。它定义了一个对象的结构。如果对象是从该类构建的,则该对象将包含的属性和方法。创建对象是您调用 new class1()
时所做的事情.这指示 PHP 使用 class1 类上的所有属性和方法创建一个新对象。
创建对象需要注意的重要一点是它也有自己的 范围 .这就是 $this 与 static::(注意:不要使用 self::或 $this::,请使用 static::(稍后会详细介绍))发挥作用的地方。使用 $this
正在指示 PHP 访问当前对象的属性和方法。使用 static::
指示 PHP 访问构建对象的基类的属性和方法。
下面是一个例子:
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
嗨Mahoor13
这应该可以大致了解设置类属性和设置实例属性之间的区别。如果您需要其他帮助,请告诉我。
编辑
$this::似乎只是 PHP 处理范围的方式的副作用。我不会认为它有效,也不会使用它。它似乎不受任何方式的支持。
关于php - php中$this::和$this->的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345165/