self 和 this php,PHP中this、self和parent的区别

this

this是指向类实例化对象的指针,因此它指向的不是类而是类实例化后的对象,例如 $obj = new Animal(); 此时类内部定义的$this指的就是$obj这个对象,而不是Animal这个类.

self

self是类自身的引用,通常指向类的静态成员和常量,在类体内引用静态成员和常量时不能用$this->var / $this->foo() 的形式.

parent

parent是指向父类的引用,通过parent可以访问父类方法(不管是否为静态)、父类静态成员和父类常量,但不可以访问父类的非静态属性.(注意:$this也可以调用父类方法,但是如果继承类覆盖了父类方法A,那么$this->A()指的是继承类的A()方法,而parent::A()指的依然是父类的A()方法,不受覆盖影响)

例子<?php

class Object{

public $name = '';

public function __construct($name){

$this->name = $name;

}

protected function foo(){

echo 'Object foo function'.PHP_EOL;

}

}

class Animal extends Object{

public static $count = 0;

const OBJECT_ID = 999;

public function __construct($name){

parent::__construct($name);

self::count();

parent::foo();

$this->foo();

}

protected function foo(){

echo 'Animal foo function'.PHP_EOL;

}

private static function count(){

self::$count += 1;

}

}

$a = new Animal('dog');

echo $a->name;

echo PHP_EOL;

echo Animal::$count;

echo PHP_EOL;

echo Animal::OBJECT_ID;

echo PHP_EOL;

$c = new Animal('cat');

echo $c->name;

echo PHP_EOL;

echo Animal::$count;

echo PHP_EOL;

echo Animal::OBJECT_ID;

/*****Output*****

Object foo function

Animal foo function

dog

1

999

Object foo function

Animal foo function

cat

2

999

*******************/

转载请注明出处:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值