php 中self,this的区别和操作方法实例分析


Posted in PHP onNovember 04, 2019

本文实例讲述了php 中self,this的区别和操作方法。分享给大家供大家参考,具体如下:

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

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

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

一. self

1.self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。用self时,可以不用实例化的

class self_test {
  static $instance;
  public function __construct(){
    self::$instance = 'instance';//静态属性只能通过self来访问
  }
  public function tank(){
    return self::$instance;//访问静态属性
  }
}
$str = new self_test();
echo $str->tank();

页面输出:

instance

class self_test {
  static $instance;
  public function __construct(){
    self::$instance = 'dell';
  }
  static public function pentium(){
    return self::$instance;//静态方法也可以继续访问静态变量,访问时需要加$
  }
  public function tank(){
    return self::pentium();//访问静态方法pentium()
  }
}
$str = new self_test();
echo $str->tank();

页面输出:

dell

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

class self_test {
  const NAME = 'tancy';
  public function tank(){
    return self::NAME;
  }
}
$str = new self_test();
echo $str->tank();

页面输出:

tancy

二.this

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

class self_test {
  public $public;
  private $private;
  protected $protected;
  public function __construct(){
    $this->public = 'public';
    $this->private = 'private';
    $this->protected = 'protected';
  }
  public function tank(){
    return $this->public;
  }
  public function dell(){
    return $this->private;
  }
  public function datesrt(){
    return $this->protected;
  }
}
$str = new self_test();
echo $str->tank();
echo "</br>";
echo $str->dell();
echo "</br>";
echo $str->datesrt();

页面输出:

public
private
protected

一句话,self是引用静态类的类名,而$this是引用非静态类的实例名。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php替换超长文本中的特殊字符的函数代码
May 22 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP将XML转数组过程详解
Nov 13 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 #PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 #PHP
php ZipArchive实现多文件打包下载实例
Oct 31 #PHP
Laravel框架实现抢红包功能示例
Oct 31 #PHP
laravel框架实现后台登录、退出功能示例
Oct 31 #PHP
TP5框架简单登录功能实现方法示例
Oct 31 #PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 #PHP
You might like
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
js返回顶部实例分享
2016/12/21 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
Python 文件重命名工具代码
2009/07/26 Python
实例讲解python中的协程
2018/10/08 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
分层教学实施方案
2014/03/19 职场文书
公司董事长岗位职责
2014/06/08 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
mysql sock文件存储了什么信息
2022/07/15 MySQL