首页 > 资讯列表 > 编程/数据库 >> PHP

php对象类中$this,static,final,const,self关键字用法

PHP 2014-12-21 19:12:04 转载来源: 网络整理/侵权必删

本文为大家讲解的是php对象类中$this,static,final,const,self关键字的用法,感兴趣的同学参考下。 php中this,self,parent三个关键字的作用  this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲

本文为大家讲解的是php对象类中$thisstaticfinalconstself关键字的用法,感兴趣的同学参考下。

php中this,self,parent三个关键字的作用 

this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲。我们先建立几个概念,这三个关键字分别是用在什么 地方呢?我们初步解释一下,this是指向当前对象的指针(姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针。我 们这里频繁使用指针来描述,可能是因为没有更好的语言来表达。
<?php  
<span style="color:#ff0000;">// this是指向当前对象的指针</span>  
class test_this{  
    private $content; //定义变量  
    function __construct($content){ //定义构造函数  
          $this->content= $content;  
    }  
    function __destruct(){}//定义析构函数  
    function printContent(){//定义打印函数  
        echo $this->content.'<br />';  
    }  
}  
$test=new test_this('北京欢迎你!'); //实例化对象  
$test->printContent();//北京欢迎你!  
$test=new test_this('新年新气象!');//再一次实例化对象  
$test->printContent();//新年新气象!  
echo '<br />';  
<span style="color:#ff0000;">//self是指向类的本身,只跟类有关,跟任何对象实例无关</span>  
class test_self{  
    private static $first_count; //定义静态变量  
    private $last_count;  
    function __construct(){  
        $this->last_count=++self::$first_count;//直接用self调用变量的值赋值给另一个变量  
    }  
    function __destruct(){}  
    function print_self(){  
        print($this->last_count);  
    }  
}  
$abc=new test_self();//实例化对象  
$abc->print_self();//1  
echo '<br />';  
<span style="color:#ff0000;">//parent是指向父类的指针</span>  
class test_parent{ //基类  
    public $name;  //定义姓名  父类成员需要定义为public,才能够在继承类中直接使用 this来调用。  
    function __construct($name){  
        $this->name=$name;  
    }  
}  
class test_son extends test_parent{ //派生类  继承test_parent  
    public $gender;//定义性别  
    public $age;    //定义年龄  
    function __construct($gender,$age){ //继承类的构造函数  
        parent::__construct('nostop');//使用parent调用父类的构造函数,来进行对父类的实例化  
        $this->gender=$gender;  
        $this->age=$age;  
    }  
    function __destruct(){}  
    function print_info(){  
        echo $this->name.'是个'.$this->gender.',今年'.$this->age.'岁'.'<br />';  
    }  
}  
$nostop=new test_son('女性','22');//实例化test_son对象  
$nostop->print_info();//执行输出函数  nostop是个女性,今年23岁  
?> 

$this

$this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式。常见用法如:
$this->属性
$this->方法
举例如下:
查看代码打印
    <span style="font-size:14px;"><?php  
    class MyClass{  
        private $name;  
        public  function __construct($name){  
            $this->name=$name;  
        }  
        public function getname(){  
            return $this->name;  
        }  
        public  function printName(){  
            echo $this->getname();  
        }  
    }  
    $myclass= new MyClass("I Like PHP");  
    $myclass->printName();//输出:I Like PHP  
    ?></span>  
在类里面调用当前类的属性和方法有三种方法,分别是self、parent、$this,这三个关键字的区别是:self用来指向当前的类;parent用于指向当前类的父类,可以使用该关键字调用父类的属性和方法;$this用来在类体内调用自身的属性和方法。

static

关键字可以是self(在类内部调用静态成员时所使用)静态成员所在的类名(在类外调用类内部的静态成员时所使用)
声明一个静态变量如下:
static $val='';
只存在于函数作用域的变量,函数执行之后变量的值不会丢失,只会初始化一次,初始化静态变量不能使用表达式,不用全局变量代替是因为全局变量会被所有函数访问容易造成维护不宜。
在类中使用static有两种主要用途、定义静态成员和定义静态方法。静态成员只保留一个变量的值,这个值对所有实例都是有效的,如下:
 
<?php  
class MyObject{  
    public static $myStaticVar=0;  
    function myMethod(){  
        self::$myStaticVar+=2;  
        echo self::$myStaticVar;  
    }  
}  
$instance1=new MyObject();  
$instance1->myMethod();  
$instance2=new MyObject();  
$instance2->myMethod();  
//结果将分别打印2、4 
<?php  
class Book{  
    static $num=0;  
    public function showMe(){  
        echo"您是滴".self::$num."位访客";  
        self::$num++;  
    }  
}  
$book1=new Book();  
$book1->showMe();  
echo"<br>";  
$book2=new Book();  
$book2->showMe();  
echo"<br>";  
echo"您是滴".Book::$num."位访客";  
?> 
结果将是:
您是滴0位访客
您是滴1位访客
您是滴2位访客
另外需要注意的是如果类的方法是static的,他所访问的属性也必须是static的。

final

最终的类和方法,不能继承,该关键字修饰的方法不能被重写。一般用法如下:
 
<?php  
final class MyClass{//此类将不允许被继承  
    final function fun1(){......}//此方法将不允许被重写  
} 

const

在类的内部方法访问已经声明为const及static的属性时,需要使用self::$name的形式调用。举例如下:
 
<?php  
class clss_a{  
    private static $name="static class_a";   
    const PI=3.14;   
    public $value;   
    public static function getName(){   
        return self::$name;   
    }   
    //这种写法有误,静态方法不能访问非静态属性   
    public static function getName2(){   
        return self::$value;   
    }   
    public function getPI(){   
        return self::PI;   
    }  
}
注意const属性的申明格式是const PI=3.14,而不是const $PI=3.14。

self

self表示类本身,指向当前的类。通常用来访问类的静态成员、方法和常量。

PHP中 :: 、-> 、self 、$this操作符的区别

在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符->。
另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。

PHP双冒号::的用法

双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。Program List:用变量在类定义外部访问。
<?php  
class Fruit {  
    const CONST_VALUE = 'Fruit Color';  
}  
$classname = 'Fruit';  
echo $classname::CONST_VALUE; // As of PHP 5.3.0  
echo Fruit::CONST_VALUE;  
?>
Program List:在类定义外部使用::
<?php  
class Fruit {  
    const CONST_VALUE = 'Fruit Color';  
}  
class Apple extends Fruit  
{  
    public static $color = 'Red';  
    public static function doubleColon() {  
        echo parent::CONST_VALUE . "n";  
        echo self::$color . "n";  
    }  
} 
程序运行结果:Fruit Color Red
 
Program List:调用parent方法
<?php  
class Fruit  
{  
    protected function showColor() {  
        echo "Fruit::showColor()n";  
    }  
}  
class Apple extends Fruit  
{  
    // Override parent's definition  
    public function showColor()  
    {  
        // But still call the parent function  
        parent::showColor();  
        echo "Apple::showColor()n";  
    }  
}  
$apple = new Apple();  
$apple->showColor();  
?> 
程序运行结果:
Fruit::showColor()
Apple::showColor()
Program List:使用作用域限定符
<?php  
    class Apple  
    {  
        public function showColor()  
        {  
            return $this->color;  
        }  
    }  
    class Banana  
    {  
        public $color;  
  
        public function __construct()  
        {  
            $this->color = "Banana is yellow";  
        }  
        public function GetColor()  
        {  
            return Apple::showColor();  
        }  
    }  
    $banana = new Banana;  
    echo $banana->GetColor();  
?>
程序运行结果:Banana is yellow
Program List:调用基类的方法
<?php  
class Fruit  
{  
    static function color()  
    {  
        return "color";  
    }  
    static function showColor()  
    {  
        echo "show " . self::color();  
    }  
}  
class Apple extends Fruit  
{  
    static function color()  
    {  
        return "red";  
    }  
}  
Apple::showColor();  
// output is "show color"!  
?> 
程序运行结果:show color

标签: php 对象 类中 this static final const self 关键字


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持