面向对象编程(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. 一文搞懂Java/Spring/Dubbo框架中的SPI机制

    几天前和一位前辈聊起了Spring技术,大佬突然说了SPI,作为一个熟练使用Spring的民工,心中一紧,咱也不敢说不懂,而是在聊完之后赶紧打开了浏览器,开始的学习之路,所以也就有了这篇文章.废话不多 ...

  2. 题解 P4449 于神之怒加强版

    这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...

  3. chcon命令详解

    导读 chcon命令是修改对象(文件)的安全上下文,比如:用户.角色.类型.安全级别.也就是将每个文件的安全环境变更至指定环境.使用--reference选项时,把指定文件的安全环境设置为与参考文件相 ...

  4. Html 之自动高度 auto 和 100%高度

    HTML 高度 下面示例 设置为 Auto 和 100% <!DOCTYPE html> <html lang="en"> <head> < ...

  5. vue2.0中模拟数据的配置

    在开发过程中,有时候接口跟不上我们的进度,我们要测试,就需要自测. 现在vue已经升级到2.0版本了,早期在vue构建工程文件在build里面有dev-server.js,但是后来构建去除了该文件集成 ...

  6. C语言判断两个值相等

    内置类型比较直接用==判断 字符串比较要用string.h里的函数strcmp(const char *str1,const char *str2)进行比较string.h里的函数strcmp(con ...

  7. JDBC中的元数据——3.结果集元数据

    package metadata; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.Pre ...

  8. Django——ORM打印SQL

    如果想打印ORM转换过程中的SQL,需要在settings.py中进行如下配置: LOGGING = { 'version': 1, 'disable_existing_loggers': False ...

  9. Linux - 解决使用 apt-get 安装 yum 的时耗报 E: Unable to locate package yum 的错误

    问题背景 在 Linux 系统下使用 apt-get 命令安装 yum 库报错 apt-get install yum E: Unable to locate package yum 问题解决 一行命 ...

  10. Vue获取Abp VNext Token

    Abp VNext默认没公开访问Token的Api,但有个问题Cookie方式如果是手机或桌面程序不如Token方便 Axios默认是Json方式提交,abp登录需要使用application/x-w ...