PHP中this,self,parent的区别

简介:

PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性。这里我主要谈的是 this,self,parent 三个关键字之间的区别。从字面上来理解,分别是指 这、自己、父亲。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针,parent是指向父类的指针。

1.this

复制代码
<?php
class UserName
{
    //定义属性
    private $name;
    //定义构造函数
    function __construct( $name )
    {
        $this->name = $name; //这里已经使用了this指针语句①
    }
 
    //析构函数
    function __destruct(){}
 
    //打印用户名成员函数
    function printname()
    {
        print( $this->name ); //再次使用了this指针语句②,也可以使用echo输出
    }
}
$obj1 = new UserName( "Jim" ); //实例化对象 语句③
 
//执行打印
$obj1->printname(); //输出: PBPHome
echo "<br>"; //输出:回车
 
//第二次实例化对象
$obj2 = new UserName( "Jack" );
 
//执行打印
$obj2->printname(); //输出:PHP
?>
复制代码

Jim

Jack

2.self

复制代码
<?php
   class Counter//定义一个Counter的类
   {
       //定义属性,包括一个静态变量$firstCount,并赋初值0 语句① 
       private static $firstCount = 0;
       private $lastCount;
 
       //构造函数
       function __construct()
       {
            $this->lastCount =++self::$firstCount;//使用self来调用静态变量 语句②
       }
 
       //打印lastCount数值
       function printLastCount()
       {
            print( $this->lastCount );
       }
   }
 
 //实例化对象
 for($i=0;$i<10;$i++){
     $obj = new Counter();
     $obj->printLastCount();
     echo '<br>';
 }
?>
复制代码

1
2
3
4
5
6
7
8
9
10

 

3.parent

复制代码
<?php
 //建立基类Animal
 class Animal
 {
    public $name; //基类的属性,名字$name
 
    //基类的构造函数,初始化赋值
    public function __construct( $name )
    {
         $this->name = $name;
    }
 }
 
 //定义派生类Person 继承自Animal类
 class Person extends Animal
 {
    public $personSex;       //对于派生类,新定义了属性$personSex性别、$personAge年龄
    public $personAge;
 
    //派生类的构造函数
    function __construct( $personSex, $personAge )
    {
         parent::__construct( "Jim");    //使用parent调用了父类的构造函数 语句①
         $this->personSex = $personSex;
         $this->personAge = $personAge;
    }
 
    //派生类的成员函数,用于打印,格式:名字 is name,age is 年龄
    function printPerson()
    {
         print( $this->name. " is ".$this->personSex. ",age is ".$this->personAge );
     }
 }
 
 //实例化Person对象
 $personObject = new Person( "male", "21");
 
 //执行打印
 $personObject->printPerson();//输出结果:Jim is male,age is 21
 
 ?>





相关文章
|
4月前
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
29 0
|
8月前
|
PHP
PHP - Laravel Blade模板注释 {{-- 注释 --}} 与 <!-- 注释 --> 的区别
PHP - Laravel Blade模板注释 {{-- 注释 --}} 与 <!-- 注释 --> 的区别
62 0
|
4月前
|
PHP 调度
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
28 5
|
4月前
|
PHP
php中elseif 和else if的区别
@(黑线)以前貌似看到if这里,就直接跳了,可是今天再读文档,又发现了点东西... @(乖)可能你已经知道了php存在elseif 和else if,保留了c的风格。
24 0
|
10月前
|
机器学习/深度学习 安全 Java
PHP, Python和Java的区别
PHP, Python和Java是广泛使用的编程语言。每种编程语言都有其独特的优点和缺点。在本文中,我们将对这些编程语言进行分析,并探讨它们在不同应用场景中的最佳用途。
|
8月前
|
数据处理 PHP
PHP面向对象和面向过程的区别
PHP面向对象和面向过程的区别
46 0
|
8月前
|
PHP 调度
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
70 0
|
存储 PHP
PHP重的重载和重写的区别是什么?底层原理是什么?
PHP重的重载和重写的区别是什么?底层原理是什么?
118 0