php中this,parent,self关键字用法详解

一,this

1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context。

2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性

 代码如下 复制代码

< ?php   
class UserName  
{   
//定义属性   
private $name;  
//定义构造函数  
function __construct( $name )  
{  
$this->name = $name;
//这里已经使用了this指针  
}  
//析构函数  
function __destruct(){}   
//打印用户名成员函数  
function printName()  
{  
print( $this->name );
//又使用了PHP关键字this指针  
}  
}   
//实例化对象  
$nameObject = new UserName
( "heiyeluren" );   
//执行打印  
$nameObject->printName();
 //输出: heiyeluren  
//第二次实例化对象  
$nameObject2 = new UserName( "PHP5" );  
//执行打印  
$nameObject2->printName(); //输出:PHP5  
?> 

我 们看,上面的类分别在11行和20行使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象 的时候(25行),那么当时this就是指向$nameObject对象,那么执行18行的打印的时候就把print( $this-><name )变成了print( $nameObject->name ),那么当然就输出了"heiyeluren"。

二,self

self是指向类本身,也就是PHP self关键字是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。
1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。
2,用self时,可以不用实例化的

 代码如下 复制代码

< ?php  
class Counter  
{  
//定义属性,包括一个静态变量  
private static $firstCount = 0;  
private $lastCount;  
//构造函数  
function __construct()  
{  
$this->lastCount = ++selft
::$firstCount;
 //使用PHP self关键字来调用静态变量,使用self
调用必须使用::(域运算符号)  
}  
//打印最次数值  
function printLastCount()  
{  
print( $this->lastCount );  
}   
}  
//实例化对象  
$countObject = new Counter();  
$countObject->printLastCount();
 //输出 1  
?> 

三,parent

parent:: 可用于调用父类中定义的成员方法。
parent::的追溯不仅于直接父类。
通过parent::调用父类方法

 代码如下 复制代码

<!-- 声明一个员工类,经理类继承自员工类 -->
<?
class employee{
 protected  $sal=3000;  
 public function getSal(){
  $this->sal = $this->sal + 1200;  
  return $this->sal ;
 } 
}

class Manager extends employee {
 //如果想让经理在员工工资的基础上多发1500元.
 //必须先调用父类的getSal()方法.
 public function getSal(){  
  parent::getSal();// 这里调用了父类的方法.
  $this->sal = $this->sal + 1500;  
  return $this->sal ;
 } 
}
$emp = new employee();
echo "普通员工的工资是 " . $emp->getSal();
echo "<br>";

$manager = new Manager();
echo "经理的工资是: " . $manager->getSal();
?>

parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。

时间: 2024-11-18 17:43:37

php中this,parent,self关键字用法详解的相关文章

IOS开发中NSURL的基本操作及用法详解_IOS

NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便. 1.URL URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL可能包含远程服务器上的资源的位置,本地磁盘上的文件的路径,甚

JavaScript中SetInterval与setTimeout的用法详解_javascript技巧

setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止 参数 描述 code 必需,要调用的函数后要执行的 JavaScript 代码串. millisec 必需,在执行代码前需等待的毫秒数. setTimeinterval setInterval(code,millisec[,"lang"]) 参数

C++中auto_ptr智能指针的用法详解_C 语言

智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容. auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有

Android中使用HTTP服务的用法详解_Android

在Android中,除了使用Java.NET包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache HttpClient是一个完善的HTTP客户端,它提供了对HTTP协议的全面支持,可以使用HTTP GET和POST进行访问.下面我们就结合实例,介绍一下HttpClient的使用方法. 我们新建一个http项目,项目结构如图: 在这个项目中,我们不需要任何的Activity,所有的操作都在单元测试类H

Excel中多条件求和sumifs用法详解

条件求和 SUMIF用法 excel/52967.htm">excel中条件求和 SUMIF用法详解 点击查看详情 多条件求和sumifs用法 sumifs函数说明 sumifs函数是在excel中用来通过多个条件筛选,将指定区域符合的数据进行求和的一个函数. 官方说明: 在区域 (区域:工作表上的两个或多个单元格.区域中的单元格可以相邻或不相邻.)中添加满足多个条件的单元格. 这样看起来有点迷茫,不过不要着急,英文版文档直译就是这么让人费解,下面咱们举个栗子~! 使用实例  A B C

Delphi常用关键字用法详解_Delphi

本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string[32]; StrLen: Byte absoluteStr; //这个声明指定了变量StrLen起始地址与Str相同. //由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度. begin Str := 'abc'; Edit1.Text := I

Java中FilterInputStream和FilterOutputStream的用法详解_java

FilterInputStream FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStream和DataInputStream. BufferedInputStream的作用就是为"输入流提供缓冲功能,以及mark()和reset()功能". DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类

laravel中的错误与日志用法详解_php实例

本文实例讲述了laravel中的错误与日志用法.分享给大家供大家参考,具体如下: 日志 laravel中的日志是基于monolog而封装的.laravel在它上面做了几个事情: ① 把monolog中的addInfo等函数简化成为了info这样的函数 ② 增加了useFiles和useDailyFiles两个参数,使得做日志管理和切割变的容易了 ③ 如果要调用monolog的方法需要调用callMonolog函数 好了,看下下面几个需求怎么实现: 将不同的日志信息存放到不同的日志中去 这个需求很

Laravel4中的Validator验证扩展用法详解_php实例

本文实例讲述了Laravel4中的Validator验证扩展用法.分享给大家供大家参考,具体如下: 不管写接口还是写web页面,实质都是传入参数,然后进行业务逻辑,然后再输出具体内容.所以,对参数的验证是不可避免的一个环节,比如传过来的email是不是为空,是不是合法的email格式?laravel已经为phper想到简化这种逻辑的办法了.就是Validator. Validator的使用 制造一个验证器 validator使用Validator::make可以制造一个验证器.然后使用验证器判断