php 类中 :: 与 -> 符号的使用

  • php 手册--范围解析操作符 (::)

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。

1、:: 的语法用于静态变量和方法,或者常量。其实也就是用于获取类的数据。
这句话反之也是成立的。获取类的数据,必须使用 :: 获取
2、类与对象是不同的,对象是需要实例化的。可以实例化的地方才可以使用 $this 变量。
3、静态方法不可以访问普通属性,因为这些属性属于对象,而不属于类
4、只有在使用 parent 关键字调用方法时,才能对一个非静态方法进行静态形式的调用。
5、static 并不意味着其中的方法或属性必须是静态的,只不过说明它属于特定的类

根据定义,我们不能再对象中调用静态方法和属性,因此静态元素又被称为类变量和属性,因此我们不能再静态方法中使用伪变量 $this

name;
        echo self::SEX;
    }

    public function getThis()
    {
        var_dump($this);
    }

    public static function getStaticThis()
    {
        //  会报错
        var_dump($this);
    }
}

echo Person::SEX; // man
$person2 = new Person();
$person1 = new Person();
$person = new Person();
$person->getAge(); // test man
$person->test(); //test man
$person->getThis(); // object(Person)#3 
$person->getStaticThis(); // Fatal error: Uncaught Error: Using $this when not in object context in /Users/long/php/test/index.php:35 Stack trace: #0 /Users/long/php/test/index.php(46): Person::getStaticThis() 
图片.png

在类中,可以使用,self::method() 或者 $this->method(),但是不可以对属性使用此种方式。

getAge());
        var_dump($this::getAge());
    }

    public function getName()
    {
        // 不可以使用这种方式
        var_dump(self::$name);
    }

}

$person = new Person();
$person->getThis();
$person->getName(); // 报错
图片.png

你可能感兴趣的:(php 类中 :: 与 -> 符号的使用)