php的常见关键字final和clone

PHP中的关键字有很多,比如public,protected,static以及描述类的abstract,interface等,在这里我主要写一些对关键字final和clone的理解

final关键字

final关键字是在PHP5后新增的。final有“最终的”含义。如果父类中的方法被声明为final,则子类是无法覆盖该方法的;如果一个类被声明为final,则不能被继承。具体语法:final(关键字)  class  classname(类名){...}

下面的代码演示了一个final修饰的类不能被继承

<?php
  final class test{
  	public function say(){
  		echo '我是一个最终类不可以被继承!';
  	}
  }
  class func extends test{
  	
  }
  $ren=new func();
  $ren->say();
?>

修改后:

<?php
  final class test{
  	public function say(){
  		echo '我是一个最终类不可以被继承!';
  	}
  }
//class func extends test{
//	
//}
  $ren=new test();
  $ren->say();
?>

final修饰成员方法语法: authority(访问控制关键字 public等) final function funcname()(方法名及参数列表){....}

以下代码演示了子类继承final成员方法并访问成员方法

<?php
  class test{
  	public function say(){
  		echo '我是一个普通成员方法。';
  	}
	public final function show(){
		echo '我是一个final成员方法。';
	}
  }
  class fun extends test{
  	
  }
  $tom=new fun();
  $tom->say();
  $tom->show();
?>

从上面的实例可以看出final类被成功继承到了子类中,并通过访问输出了字符串。下面来尝试覆盖final成员方法

<?php
  class test{
  	public function say(){
  		echo '我是一个普通成员方法。';
  	}
	public final function show(){
		echo '我是一个final成员方法。';
	}
  }
  class fun extends test{
  	public function show(){
  		echo '我是覆盖final方法';
  	} 
  }
  $tom=new fun();
  $tom->say();
  $tom->show();
?>

所以在以后的编程中如果不想类被子类重写,或者类不想被继承,就可以用final关键字来修饰

clone关键字

在编程过程中有时候需建立一个对象的副本,希望对原对象的修改不会影响到副本对象,实际上可以在实例化一个对象并给属性添加相应的值。但这是比较繁琐的,特别是属性很多的时候。这时候就可以用clone关键字来复制一个一模一样的对象

语法:$newname(新对象名)=clone $objname(要复制的对象名)

复制一个对象并赋值给一个新的对象名,并输出它们的信息

<?php
  class test{
    private $name;
	private $age;
	private $sex;
	public function __construct($name,$age,$sex){
		$this->name=$name;
		$this->age=$age;
		$this->sex=$sex;
	}  	
	public function info(){
		echo '我的名字是:'.$this->name.'<br>';
		echo '我的年龄是:'.$this->age.'<br>';
		echo '我的性别是:'.$this->sex.'<br>';
	}
  }
  $tom=new test("小张",18,"女");
  $tom->info();
  $jim=clone $tom;
  $jim->info();
?>

从结果可以看出,复制后的对象和原来的对象是完全相同的。clone在类中也有一个类似类的构造函数的方法__clone()。它会在使用clone关键字复制一个对象的时候自动调用。所以可以用__clone做一些初始化的工作

__clone的语法:authority(访问控制关键字)  function __clone(){...}

代码示例:

<?php
  class test{
    private $name;
	private $age;
//	private $sex;
	public function __construct($name,$age=0){
		$this->name=$name;
		$this->age=$age;
//		$this->sex=$sex;
	}  	
	public function __clone(){
		$this->age++;
	}
	public function info(){
		echo '我的名字是:'.$this->name.'<br>';
		echo '我的年龄是:'.$this->age.'<br>';
//		echo '我的性别是:'.$this->sex.'<br>';
	}
  }
  $tom=new test("小张");
  $tom->info();
  $jim=clone $tom;
  $jim->info();
  $jack=clone $jim;
  $jack->info();
?>

从结果可以看出,在复制了一个对象后,__clone()函数使得对象的ID递增,控制了复制对象的初始化。这在不使用__clone()函数时是完全做不到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值