php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > php中this,parent,self关键字用法 - php面向对象

php中this,parent,self关键字用法 - php面向对象

分享到:
【字体:
导读:
          this,parent,self都是在php中的class类中了,下面我来分别介绍this,parent,self在类中用应用与区别。一,this1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this whe...

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

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

二,self

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

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

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

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

三,parent

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

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

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

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

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

分享到:
PHP框架模板原理分析 - php面向对象
PHP框架模板原理分析 本文主要来聊聊框架理论,但不针对任何一款框架,不过任何一款框架都离不开这个理论,首先我们了解下框架的来龙去脉,任何技术的出现都是为了解决某个问题,之前的博客有讲过smarty,其存在就是为了html和php更好地分离开来,而所谓的“框架”是一种为了统一书写格式,访问方式而...
PHP中的魔术方法总结 - php面向对象
PHP中的魔术方法总结 下面我们来总结php中魔术方法总结,包括有__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1、__get、__set 这两个方法是为在类和他们的父类中没有声明的属性而...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……