php中this,parent,self关键字用法

this,parent,self都是在php中的class类中了,下面我来分别介绍this,parent,self在类中用应用与区别。

一,this

1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context.

2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性,代码如下:

  1. <?php
  2. class UserName
  3. {
  4. //定义属性
  5. private $name;
  6. //定义构造函数
  7. function __construct( $name )
  8. {
  9. $this->name = $name;
  10. //这里已经使用了this指针
  11. }
  12. //析构函数
  13. function __destruct(){}
  14. //打印用户名成员函数
  15. function printName()
  16. {
  17. print( $this->name );
  18. //又使用了PHP关键字this指针
  19. }
  20. }
  21. //实例化对象
  22. $nameObject = new UserName
  23. ( "heiyeluren" );
  24. //执行打印
  25. $nameObject->printName();
  26. //输出: heiyeluren
  27. //第二次实例化对象
  28. $nameObject2 = new UserName( "PHP5" );
  29. //执行打印
  30. $nameObject2->printName(); //输出:PHP5
  31. ?>

我们看,上面的类分别在11行和20行使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象 的时候(25行),那么当时this就是指向$nameObject对象,那么执行18行的打印的时候就把print($this-><name )变成了print($nameObject->name),那么当然就输出了"heiyeluren".

二,self

self是指向类本身,也就是PHP self关键字是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量.

1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。

2,用self时,可以不用实例化的,代码如下

  1. <?php
  2. class Counter
  3. {
  4. //定义属性,包括一个静态变量
  5. private static $firstCount = 0;
  6. private $lastCount;
  7. //构造函数
  8. function __construct()
  9. {
  10. $this->lastCount = ++selft
  11. ::$firstCount;
  12. //使用PHP self关键字来调用静态变量,使用self
  13. 调用必须使用::(域运算符号)
  14. }
  15. //打印最次数值
  16. function printLastCount()
  17. {
  18. print( $this->lastCount );
  19. }
  20. }
  21. //实例化对象
  22. $countObject = new Counter();
  23. $countObject->printLastCount();
  24. //输出 1
  25. ?>

三,parent

parent:: 可用于调用父类中定义的成员方法。

parent::的追溯不仅于直接父类。

通过parent::调用父类方法,代码如下:

  1. <!-- 声明一个员工类,经理类继承自员工类 -->
  2. <?
  3. class employee{
  4. protected $sal=3000;
  5. public function getSal(){
  6. $this->sal = $this->sal + 1200;
  7. return $this->sal ;
  8. }
  9. }
  10. class Manager extends employee {
  11. //如果想让经理在员工工资的基础上多发1500元.
  12. //必须先调用父类的getSal()方法.
  13. public function getSal(){
  14. parent::getSal();// 这里调用了父类的方法.
  15. $this->sal = $this->sal + 1500;
  16. return $this->sal ;
  17. }
  18. }
  19. $emp = new employee();
  20. echo "普通员工的工资是 " . $emp->getSal();
  21. echo "<br>";
  22. $manager = new Manager();
  23. echo "经理的工资是: " . $manager->getSal();
  24. ?>

parent是指向父类的指针,一般我们使用parent来调用父类的构造函数.