php - php中$this::和$this->的区别

标签 php oop class this self

这个问题在这里已经有了答案:




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/

相关文章:

Python 继承和 __init__

php - 在构造函数中使用 "new"关键字

java - 在Java中,当参数为null时将选择哪个构造函数

javascript - 动态加载新内容后 jquery 触发器不起作用

php - 使用 PHP 生成文件夹图标并预览其内容

c++ - 从书本上学习 C++ 无法让这个程序与类一起工作

objective-c - 自动生成代码以创建具有未知类的对象

php - 拆分一个大的 PHP 类

php - 如何用冒号打印 YouTube OpenGraph 属性?

php - 从 Mysql 日期格式 m/d/y 中获取月份和年份并与今天的月份和年份进行比较