本文为大家讲解的是php对象类中$this,static,final,const,self关键字的用法,感兴趣的同学参考下。 php中this,self,parent三个关键字的作用 this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲
本文为大家讲解的是php对象类中$this,static,final,const,self关键字的用法,感兴趣的同学参考下。
php中this,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>
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;
}
}
self
PHP中 :: 、-> 、self 、$this操作符的区别
另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。
PHP双冒号::的用法
在类定义外使用的话,使用类名调用。在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;
?>
<?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";
}
}
<?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()
<?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();
?>
<?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"!
?>
标签: php 对象 类中 this static final const self 关键字
声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!