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

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

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

页面输出:dell

     2.self可以访问const定义的常量

  1. class self_test {
  2. const  NAME = 'tancy';
  3. public function tank(){
  4. return self::NAME;
  5. }
  6. }
  7. $str = new self_test();
  8. echo $str->tank();

页面输出:tancy

二.this
      1.this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性,可以说除过静态和const常量,基本上其他都可以使用this联络

  1. class self_test {
  2. public $public;
  3. private $private;
  4. protected $protected;
  5. public function __construct(){
  6. $this->public = 'public';
  7. $this->private = 'private';
  8. $this->protected = 'protected';
  9. }
  10. public function tank(){
  11. return $this->public;
  12. }
  13. public function dell(){
  14. return $this->private;
  15. }
  16. public function datesrt(){
  17. return $this->protected;
  18. }
  19. }
  20. $str = new self_test();
  21. echo $str->tank();
  22. echo "</br>";
  23. echo $str->dell();
  24. echo "</br>";
  25. echo $str->datesrt();
页面输出: public
       private
       protected
 
一句话,self是引用静态类的类名,而$this是引用非静态类的实例名。

随机推荐

  1. 超过Numpy的速度有多难?试试Numba的GPU加速

    技术背景 Numpy是在Python中非常常用的一个库,不仅具有良好的接口文档和生态,还具备了最顶级的性能,这个库很大程度上的弥补了Python本身性能上的缺陷.虽然我们也可以自己使用Cython或者 ...

  2. Freemarker基本语法

    一.概念 Freemarker是一款模板引擎,并用来输出文本,网页或配置文件等. 二.语法 2.1 注释 <!-- 在页面可以看的到 --> <#-- 在页面看不到 --> 2 ...

  3. C#基础知识---获取调用者信息

    一.概述 C#5.0提供了一种新功能,可以利用特性和可选参数获得调用者的信息.这些特性信息包括CallerLineNumber.CallerFilePath和CallerMemberName. 二.D ...

  4. .NET 元数据概述

    元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述.将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Mi ...

  5. BootstrapTable插件的使用 【转】

    一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这 ...

  6. linux(4)----------ssh config详解

    1.概述 ~~  config为了方便我们批量管理多个ssh ~~  config存放在~/.ssh/config                 .XX代表隐藏目录 ~~  config配置语法 2 ...

  7. tomcat中修改Web站点的默认根目录

    转自:http://blog.csdn.net/wzqcongcong/article/details/6387907 想把Tomcat的默认网站根目录修改成自己指定的目录,比如:F:/MyWeb.这 ...

  8. JAVA中直接用Jdbc就能操作数据库了,为什么还要用spring框架?

    不过随着业务的扩展,你就会发现jdbc建立一个连接居然要几百毫秒,而执行一个普通的SQL仅仅需要几毫秒. 这么重量级的资源建立了就释放了不合适,得找个容器存起来,谁要就来取,不用了就还给容器,毕竟容器 ...

  9. “类型思维”之Typescript,你掌握了吗?

    (一)背景 JavaScript是一门动态弱类型语言 对变量的类型非常宽容 而且不会在这些变量和它们的调用者之间建立结构化的契约. 试想有这么几个场景: 1: 你调用一个别人写的函数,但是这个人没有写 ...

  10. 证明n个正数的算术平均数不小于它们的几何平均数