self this
这里我主要谈的是this,self关键字之间的区别。从字面上来理解,分别是指这、自己。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),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();
- 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
- 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();
private
protected
一句话,self是引用静态类的类名,而$this是引用非静态类的实例名。
随机推荐
- zookeeper同一台服务器创建伪集群
下载zk wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7 ...
- 【HMC Core 6.0全球上线】图形计算服务新插件,助力高画质3D手游创新
HMS Core 6.0已于7月15日全球上线,本次新版本向广大开发者开放了众多全新能力与技术.其中华为图形计算服务(CG Kit)开放了体积雾插件和流体插件,为3D手游画面的提升提供了坚实的技术基础 ...
- dataTemplate 使用
App ----------------------------------------------------------------- <Application x:Class=" ...
- java Math.random()生成从n到m的随机整数
Java中Math类的random()方法可以生成[0,1)之间的随机浮点数.而double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失. 如果要生成[0, ...
- JS对象创建的几种方法
最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式.话不多说,直接步入正题. 第一种:Object构造函数创建 var Person = new Object(); Person.n ...
- "排序二叉树"之探幽
/*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值: (2)所有右节点的数值都大于此节点的数值. */ 1 /*************** ...
- Hibernate之检索方式
时间:2017-1-22 16:09 --检索方式Hibernate中提供了以下几种检索对象的方式: * 导航对象图检索方式 根据已经加载额对象导航到其他对象. ...
- playwright-python 元素定位、frame处理(一)
浏览器.Browser contexts.frame Playwright 可以同时启动多个浏览器(chromium.Firefox.webkit),每个浏览器可以启动多个page(在Playwrig ...
- go defer关键字使用规则
defer 用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行 数据结构 type _defer struct { sp uintptr //函数栈指针 pc ...
- ES6扩展——对象的扩展(简洁表示法与属性名表达式)
1.简洁表达法. 当属性名与属性值相同时,可省略属性值:例如:{name : name}可以写成 {name} 属性方法中,可省略冒号与function,直接 属性名(){}即可.例如{say : f ...