1,类的继承
// 引用父类方法内容 parent :: 要加()内的部分要写全, 没有参数要加空括号 (),变量不可以引用
// 类的继承要主要类成员的访问权限, 私有成员不可以继承
// 类的继承为类的复制,类的方法扩展,类的方法重写
// 类的方法扩展,是在父类的基础上增加新的属性及方法
// 类的方法重写,是指在父类的基础上进行新的方法设定,
// 因为子类的名称与父类不同,方法扩展和重写,都相当于是一个新的方法,但可以减少父类部分的代码书写量。
// __construct中的参数要写在 new 对象中 而不是对象调用的方法中
实例
class Postion{ // 属性 public $pos; public $comname; public $contry; // 此处接受外面的传值,向属性赋值 function __construct($pos,$comname,$contry) { // 指定传值对应的属性 $this->pos=$pos; $this->comname=$comname; $this->contry=$contry; } function getinfo() { return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry; } } // new 一个对象,并传值 $po = new Postion('php工程师','php中文网','中国大陆'); // 输出指定对象的一个指定方法 echo $po->getinfo(); echo '<hr>'; // 继承Postion的内容及扩展年假标准 class Cnpos extends Postion { public $salary; public $cont; // __construct参数要写全 function __construct($pos,$comname,$contry,$salary,$cont) { // 引用父类—__construct的内容 __construct参数要写全 parent内容要加()内的部分 变量不可以引用 parent::__construct($pos,$comname,$contry); $this->salary=$salary; $this->cont=$cont; } function getinfo1(){ // 返回父类getinfo的内容 有两种方式, // 方式一 this指定父类内容 return $this->getinfo().'<br>'.'薪水标准:'.$this->salary.'元'.'<br>'.'合同年限:'.$this->cont.'年'; // 方式二 返回父类的引用 return parent::getinfo().'<br>'.'薪水标准:'.$this->salary.'元'.'<br>'.'合同年限:'.$this->cont.'年'; } } $po1 = new Cnpos('php工程师','php中文网','中国大陆',10000,3); echo $po1->getinfo1(); echo '<hr>'; // // 年假计算 aleaves方法重载 class Aleave extends Cnpos { // 方法内容要返回出去才有效 function annual(){ return 7; } //非数值返回,无法进行赋值计算,如需要计算要分别返回 function aleaves() { return $this->getinfo1().'<br>'.'年假天数:'.$this->annual().'天/年'; } } $po2 = new Aleave('php工程师','php中文网','中国大陆',20000,3); echo $po2->aleaves(); echo '<hr>'; class AleaveNew extends Aleave { function aleaves() { // 把父类内的方法赋值注意要加() $aleavetatol = parent::annual(); switch(true) { case ($this->cont >2 && $this->cont <3): $aleavetatol += 2; break; case ($this->cont >=3 && $this->cont <5): $aleavetatol += 4; break; case ($this->cont >=5): $aleavetatol += 7; break; default: } return $this->getinfo1().'<br>'.'年假天数:'.$aleavetatol.'天/年'.',合同年限每多两年,年假多增加两天'; } } $po3 = new AleaveNew('php工程师','php中文网','中国大陆',20000,3); echo $po3->aleaves(); echo '<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
2,类的访问权限
// 理解:类中内容的调用权限管理 // 类内容的访问限制
// 类的访问限制是指类内容的对外开放的权限,可以指定类成员的调用源,以提高代码的隐私性。
// 类的属性和方法前加限定符:
// protected 是指子类可以调用
// private ***类自己调用
// public 是指可以从外部单独调用
// 用户权限访问器是由方法控制而不是由类成员访问权限控制,超出访问权限访问会报错,而不是访问返回空,需要区别理解
实例
class Postion1{ // 属性 public $pos; protected $comname; public $contry; private $level; // 此处接受外面的传值,向属性赋值 function __construct($pos,$comname,$contry,$level) { // 指定传值对应的属性 $this->pos=$pos; $this->comname=$comname; $this->contry=$contry; $this->level=$level; } function getinfo() { return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry.'<br>'.'职位等级:'.$this->level; } } class Postion2 extends Postion1 { function getinfo() { return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry.'<br>'. '职位等级:'.$this->level; } } $postion = new Postion1('前端开发讲师','php中文网','中国大陆','p3'); $postion2 = new Postion2('前端开发讲师','php中文网','中国大陆','p3'); // $level是private 私有项 ,类内部的方法可以调用,外部不可以直接调用。子类中也不可以调用 // echo $postion->level; echo '<hr>'; // $comname是protected 保护项 ,类内部的方法可以调用,外部不可以直接调用。也可以通过子类的方法调用 echo $postion->getinfo(); echo '<hr>'; // 此项输出会报错 echo $postion->comname; echo '<hr>'; // 此项输出会报错,去掉postion2中getinfo中的this->level 后正常 echo $postion2->getinfo();
运行实例 »
点击 "运行实例" 按钮查看在线实例