面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能。利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的。

这里我主要谈的是this,self关键字之间的区别。从字面上来理解,分别是指这、自己。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针。我们这里频繁使用指针来描述

因为经常用框架的缘故,所以对php底层的一些运行机制和方法都不会了,所以最近比较喜欢研究这些底层的东西,写的东西虽然不是很好,但是自己一步步实地操作过来的,理解起来也比较容易,现在网上大多数的资料要么就是按照手册抄过来很官方的一些话,要么就是那些千篇一律的文章,确实有些不好理解,所以只能自己动手来熟悉啦

一. self
.    1.self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。用self时,可以不用实例化的
[php]  view plain  copy
 
  1. class self_test {  
  2.   
  3.     static $instance;  
  4.   
  5.     public function __construct(){  
  6.         self::$instance = 'instance';//静态属性只能通过self来访问  
  7.     }  
  8.   
  9.     public function tank(){  
  10.         return self::$instance;//访问静态属性  
  11.     }  
  12. }  
  13.   
  14. $str = new self_test();  
  15. echo $str->tank();  
页面输出:instance
[php]  view plain  copy
 
  1. class self_test {  
  2.   
  3.     static $instance;  
  4.   
  5.     public function __construct(){  
  6.         self::$instance = 'dell';  
  7.     }  
  8.   
  9.     static public function pentium(){  
  10.         return self::$instance;//静态方法也可以继续访问静态变量,访问时需要加$  
  11.     }  
  12.   
  13.     public function tank(){  
  14.         return self::pentium();//访问静态方法pentium()  
  15.     }  
  16. }  
  17.   
  18. $str = new self_test();  
  19. echo $str->tank();  
页面输出:dell

     2.self可以访问const定义的常量
[php]  view plain  copy
 
  1. class self_test {  
  2.   
  3.     const  NAME = 'tancy';  
  4.   
  5.     public function tank(){  
  6.         return self::NAME;  
  7.     }  
  8. }  
  9.   
  10. $str = new self_test();  
  11. echo $str->tank();  
页面输出:tancy

二.this
      1.this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性,可以说除过静态和const常量,基本上其他都可以使用this联络
  
[php]  view plain  copy
 
  1. class self_test {  
  2.     public $public;  
  3.   
  4.     private $private;  
  5.   
  6.     protected $protected;  
  7.   
  8.     public function __construct(){  
  9.         $this->public = 'public';  
  10.         $this->private = 'private';  
  11.         $this->protected = 'protected';  
  12.     }  
  13.   
  14.     public function tank(){  
  15.         return $this->public;  
  16.     }  
  17.   
  18.     public function dell(){  
  19.         return $this->private;  
  20.     }  
  21.   
  22.     public function datesrt(){  
  23.         return $this->protected;  
  24.     }  
  25. }  
  26.   
  27. $str = new self_test();  
  28. echo $str->tank();  
  29. echo "</br>";  
  30. echo $str->dell();  
  31. echo "</br>";  
  32. echo $str->datesrt();  
页面输出: public
       private
       protected
 
一句话,self是引用静态类的类名,而$this是引用非静态类的实例名。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

PHP从入门到精通(二)